名前空間
変種
操作

std::vector<T,Allocator>::resize

提供: cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
void resize( size_type count, T value = T() );
(C++11未満)
void resize( size_type count );
(1) (C++11以上)
void resize( size_type count, const value_type& value );
(2) (C++11以上)

count 個の要素を格納するようにコンテナのサイズを変更します。

現在のサイズが count より大きい場合、最初の count 個の要素にコンテナが縮小されます。

現在のサイズが count より小さい場合、 value のコピーで初期化された要素が追加されます。

(C++11未満)

現在のサイズが count より小さい場合、

1) デフォルト挿入された要素が追加されます。
2) value のコピーが追加されます。
(C++11以上)

目次

[編集] 引数

count - コンテナの新しいサイズ
value - 新しい要素を初期化する値
型の要件
-
オーバーロード (1) を使用するためには TMoveInsertable および DefaultInsertable の要件を満たさなければなりません。
-
オーバーロード (2) を使用するためには TCopyInsertable の要件を満たさなければなりません。

[編集] 戻り値

(なし)

[編集] 計算量

現在のサイズと count の差に比例。 容量が count より小さい場合、再確保のために追加の計算量が発生する場合があります。

例外

例外が投げられた場合、この関数は効果を持ちません (強い例外保証)、

オーバーロード (1) で、 T のムーブコンストラクタが noexcept でなく、 T が *thisCopyInsertable でない場合、 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

[編集] 関連項目

要素数を返します
(パブリックメンバ関数) [edit]
要素を挿入します
(パブリックメンバ関数) [edit]
要素を削除します
(パブリックメンバ関数) [edit]