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 以上になる。
|
(C++20以前) |
|
(C++20以降) |
目次 |
パラメータ
| new_cap | - | 文字列の新しい容量 |
戻り値
(なし)
例外
std::length_error をスローする( new_cap が max_size() より大きい場合)。
std:: allocator_traits < Allocator > :: allocate ( ) によってスローされる例外( std::bad_alloc など)をスローする可能性があります。
何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( strong exception safety guarantee )。
計算量
文字列の 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'; // 容量増加率の観察 auto cap{s.capacity()}; for (int check{}; check != 4; ++check) { while (cap == s.capacity()) s += '$'; cap = s.capacity(); std::cout << (3) + check << ") 容量: " << 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) 容量: 202 4) 容量: 404 5) 容量: 808 6) 容量: 1616 7) shrink_to_fit 実行後: 809
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 847 | C++98 | 例外安全性保証がなかった | 強い例外安全性保証を追加 |
関連項目
|
現在割り当てられているストレージに格納可能な文字数を返す
(public member function) |
|
|
格納されている文字数を変更する
(public member function) |