Namespaces
Variants

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

From cppreference.net

void resize ( size_type count ) ;
(1) (constexpr since C++26)
void resize ( size_type count, const value_type & value ) ;
(2) (constexpr since C++26)

コンテナを count 個の要素を含むようにサイズ変更します:

  • count が現在のサイズと等しい場合、何も行いません。
  • 現在のサイズが count より大きい場合、コンテナは最初の count 要素に縮小されます。
  • 現在のサイズが count より小さい場合、以下の処理が行われます:
1) 追加の T ( ) のコピー (C++11まで) デフォルト挿入された 要素 (C++11以降) が追加されます。
2) 追加の value のコピーが追加されます。

目次

パラメータ

count - コンテナの新しいサイズ
value - 新しい要素を初期化する値
型要件
-

以下の条件が満たされる場合、動作は未定義です:

1) T DefaultInsertable でない場合
2) T CopyInsertable でない場合
(C++11以降)

計算量

現在のサイズと count の差に対して線形。

注記

オーバーロード ( 1 ) における値初期化が望ましくない場合、例えば要素が非クラス型でありゼロ初期化が不要な場合、 カスタム Allocator::construct を提供することで回避できます。

#include <list>
#include <iostream>
void print(auto rem, const std::list<int>& c)
{
    for (std::cout << rem; const int el : c)
        std::cout << el << ' ';
    std::cout << '\n';
}
int main()
{
    std::list<int> c = {1, 2, 3};
    print("The list holds: ", c);
    c.resize(5);
    print("After resize up to 5: ", c);
    c.resize(2);
    print("After resize down to 2: ", c);
    c.resize(6, 4);
    print("After resize up to 6 (initializer = 4): ", c);
}

出力:

The list holds: 1 2 3
After resize up to 5: 1 2 3 0 0
After resize down to 2: 1 2
After resize up to 6 (initializer = 4): 1 2 4 4 4 4

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用バージョン 公開時の動作 正しい動作
LWG 132 C++98 削除範囲の決定にランダムアクセス反復子が使用されていた 双方向反復子を使用
LWG 679 C++98 resize() value を値渡ししていた const参照渡しを使用
LWG 1420 C++98 resize ( size ( ) ) の動作が規定されていなかった 規定済み

関連項目

要素の最大可能数を返す
(public member function)
要素数を返す
(public member function)
コンテナが空かどうかをチェックする
(public member function)