std::basic_string<CharT,Traits,Allocator>:: reserve
| (1) | ||
|
void
reserve
(
size_type new_cap
=
0
)
;
|
(до C++20) | |
|
constexpr
void
reserve
(
size_type new_cap
)
;
|
(начиная с C++20) | |
|
void
reserve
(
)
;
|
(2) |
(начиная с C++20)
(устарело в C++20) (удалено в C++26) |
std::basic_string
о планируемом изменении размера, чтобы он мог соответствующим образом управлять выделением памяти.
- Если new_cap превышает текущую capacity() , выделяется новая память, и capacity() становится равной или больше new_cap .
|
(until C++20) |
|
(since C++20) |
Содержание |
Параметры
| new_cap | - | новая ёмкость строки |
Возвращаемое значение
(нет)
Исключения
Выбрасывает std::length_error если new_cap больше чем max_size() .
Может выбрасывать любые исключения, выбрасываемые std:: allocator_traits < Allocator > :: allocate ( ) , такие как std::bad_alloc .
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).
Сложность
Не более чем линейно по size() строки.
Пример
#include <cassert> #include <iostream> #include <string> int main() { std::string s; std::cout << "1) Изначально: " << s.capacity() << '\n'; const std::string::size_type new_cap{101u}; s.reserve(new_cap); assert(s.capacity() >= new_cap); std::cout << "2) После reserve(" << new_cap << "): " << s.capacity() << '\n'; // наблюдение за коэффициентом роста capacity auto cap{s.capacity()}; for (int check{}; check != 4; ++check) { while (cap == s.capacity()) s += '$'; cap = s.capacity(); std::cout << (3) + check << ") Capacity: " << cap << '\n'; } // s.reserve(); // устарело/удалено в C++20/26, используйте: s.shrink_to_fit(); std::cout << "7) После shrink_to_fit: " << s.capacity() << '\n'; }
Возможный вывод:
1) Изначально: 15 2) После reserve(101): 101 3) Capacity: 202 4) Capacity: 404 5) Capacity: 808 6) Capacity: 1616 7) После shrink_to_fit: 809
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 847 | C++98 | не было гарантии безопасности исключений | добавлена строгая гарантия безопасности исключений |
Смотрите также
|
возвращает количество символов, которое может содержаться в текущем выделенном хранилище
(public member function) |
|
|
изменяет количество хранимых символов
(public member function) |