std::vector<T,Allocator>::resize - cppreference.com
提供: cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>
|
|
(C++11未満) | |
|
|
(1) | (C++11以上) |
|
|
(2) | (C++11以上) |
count 個の要素を格納するようにコンテナのサイズを変更します。
現在のサイズが count より大きい場合、最初の count 個の要素にコンテナが縮小されます。
|
現在のサイズが |
(C++11未満) |
|
現在のサイズが 2) |
(C++11以上) |
引数
| count | - | コンテナの新しいサイズ |
| value | - | 新しい要素を初期化する値 |
| 型の要件 | ||
-オーバーロード (1) を使用するためには T は MoveInsertable および DefaultInsertable の要件を満たさなければなりません。
| ||
-オーバーロード (2) を使用するためには T は CopyInsertable の要件を満たさなければなりません。
| ||
戻り値
(なし)
計算量
現在のサイズと count の差に比例。 容量が count より小さい場合、再確保のために追加の計算量が発生する場合があります。
例外
例外が投げられた場合、この関数は効果を持ちません (強い例外保証)、
オーバーロード (1) で、 T のムーブコンストラクタが noexcept でなく、 T が *this に CopyInsertable でない場合、 vector は例外を投げるムーブコンストラクタを使用します。 それが例外を投げた場合、保証は断念され、効果は未規定です。 |
(C++11以上) |
ノート
オーバーロード (1) の値初期化を望まない場合、例えば要素が非クラス型でゼロクリアが不要な場合、カスタム Allocator::construct を提供すれば、それを回避することができます。
より小さなサイズに変更しても vector の容量は縮小されません。 これは、 pop_back() を複数回呼び出すことで同等の効果を得た場合に無効化されるイテレータは削除されたもののみであるのに対し、容量の変更はすべてのイテレータを無効化するためです。
例
#include <iostream> #include <vector> int main() { std::vector<int> c = {1, 2, 3}; std::cout << "The vector holds: "; for(auto& el: c) std::cout << el << ' '; std::cout << '\n'; c.resize(5); std::cout << "After resize up to 5: "; for(auto& el: c) std::cout << el << ' '; std::cout << '\n'; c.resize(2); std::cout << "After resize down to 2: "; for(auto& el: c) std::cout << el << ' '; std::cout << '\n'; }
出力:
The vector holds: 1 2 3 After resize up to 5: 1 2 3 0 0 After resize down to 2: 1 2