Метод reserve
Метод reserve резервирует память для строки,
чтобы избежать повторных перевыделений при добавлении
символов. Сама строка при этом не изменяется - её длина
остаётся прежней. В параметр мы передаём желаемый размер
ёмкости в символах. Если переданное значение меньше
текущей ёмкости, метод ничего не делает.
Ёмкость строки - это количество символов, которое строка может хранить без дополнительного перевыделения памяти. Ёмкость всегда больше или равна длине строки.
Синтаксис
str.reserve(count)
Пример
Давайте зарезервируем память под 10 символов
и посмотрим, как изменится ёмкость строки:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "abcde";
cout << "Length: " << str.length() << endl;
cout << "Capacity before: " << str.capacity() << endl;
str.reserve(10);
cout << "Length: " << str.length() << endl;
cout << "Capacity after: " << str.capacity() << endl;
return 0;
}
Результат выполнения кода:
"Length: 5"
"Capacity before: 15"
"Length: 5"
"Capacity after: 15"
Длина строки не изменилась, а ёмкость осталась прежней,
так как исходная ёмкость уже была больше 10.
Пример
Давайте зарезервируем память под 20 символов
и посмотрим, как изменится ёмкость строки:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "abcde";
cout << "Capacity before: " << str.capacity() << endl;
str.reserve(20);
cout << "Capacity after: " << str.capacity() << endl;
return 0;
}
Результат выполнения кода:
"Capacity before: 15"
"Capacity after: 20"
Пример
Давайте используем reserve перед добавлением
большого количества символов, чтобы избежать лишних
перевыделений памяти:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
str.reserve(100);
for (int i = 0; i < 5; i++)
{
str += "ab";
}
cout << str << endl;
cout << "Length: " << str.length() << endl;
cout << "Capacity: " << str.capacity() << endl;
return 0;
}
Результат выполнения кода:
"ababababab"
"Length: 10"
"Capacity: 100"
Смотрите также
-
метод
capacity,
который возвращает ёмкость строки -
метод
shrink_to_fit,
который уменьшает ёмкость до длины строки -
метод
resize,
который изменяет размер строки -
метод
length,
который возвращает длину строки