Получение и изменение размера строки

Для получения и изменения размера строки предназначены следующие методы:

  • size() и length() — возвращают текущее количество символов в строке (без учета нулевого символа). Прототипы методов:
size_type size() const noexcept;
size_type length() const noexcept;

Пример:

std::string str("строка");
std::cout << str.size() << std::endl;    // 6
std::cout << str.length() << std::endl;  // 6
std::wstring wstr(L"строка");
std::cout << wstr.size() << std::endl;   // 6
std::cout << wstr.length() << std::endl; // 6
  • capacity() — возвращает количество символов, которое можно записать в строку без перераспределения памяти. Прототип метода:
size_type capacity() const noexcept;

Пример:

std::string str("строка");
std::cout << str.size() << std::endl;     // 6
std::cout << str.capacity() << std::endl; // 15
str += " строка2 строка3";
std::cout << str.size() << std::endl;     // 22
std::cout << str.capacity() << std::endl; // 30
  • reserve() — позволяет задать минимальное количество символов, которое можно записать в строку без перераспределения памяти. Как видно из предыдущего примера, выделение дополнительной памяти производится автоматически с некоторым запасом. Если дозапись в строку производится часто, то это может снизить эффективность программы, так как перераспределение памяти будет выполнено несколько раз. Поэтому, если количество символов заранее известно, то следует указать его с помощью метода reserve(). Прототип метода:
void reserve(size_type res=0);

Пример указания минимального размера строки:

std::string str("строка");
str.reserve(50);
std::cout << str.size() << std::endl;     // 6
std::cout << str.capacity() << std::endl; // 50
str += " строка2 строка3";
std::cout << str.size() << std::endl;     // 22
std::cout << str.capacity() << std::endl; // 50
  • shrink_to_fit() — уменьшает размер строки до минимального значения. Прототип метода:
void shrink_to_fit();

Пример:

std::string str("строка");
str.reserve(50);
std::cout << str.capacity() << std::endl; // 50
str.shrink_to_fit();
std::cout << str.capacity() << std::endl; // 15
  • resize() — задает количество символов в строке, равное числу n. Если указанное количество символов меньше текущего количества, то лишние символы будут удалены. Если количество символов необходимо увеличить, то в параметре ch можно указать символ, который заполнит новое пространство. Если параметр ch не задан, то добавляются нулевые символы. Прототипы метода:
void resize(size_type n);
void resize(size_type n, _CharT ch);

Пример:

std::setlocale(LC_ALL, "Russian_Russia.1251");
std::string str("строка");
str.resize(4);
std::cout << str << std::endl;            // стро
str.resize(8, '*');
std::cout << str << std::endl;            // стро****
  • empty() — возвращает значение true, если строка не содержит символов, и false — в противном случае. Прототип метода:
bool empty() const noexcept;

Пример:

std::setlocale(LC_ALL, "Russian_Russia.1251");
std::string str("строка");
// str.clear();
if (str.empty()) {
   std::cout << "Строка пустая" << std::endl;
}
else {
   std::cout << "Строка содержит символы" << std::endl;
}
  • max_size() — возвращает максимальное количество символов, которое может содержаться в строке. Прототип метода:
size_type max_size() const noexcept;

Пример:

std::string str("строка");
std::cout << str.max_size() << std::endl; // 9223372036854775807

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов