Skip to content

Latest commit

 

History

History
81 lines (61 loc) · 2.64 KB

File metadata and controls

81 lines (61 loc) · 2.64 KB

resize

  • list[meta header]
  • std[meta namespace]
  • list[meta class]
  • function[meta id-type]
void resize(size_type sz);           // (1) C++11
constexpr void resize(size_type sz); // (1) C++26

void resize(size_type sz, const value_type& c);           // (2) C++11
constexpr void resize(size_type sz, const value_type& c); // (2) C++26

void resize(size_type sz, T c = T());                     // (1) + (2) C++98。C++11で削除

概要

要素数を変更する。

テンプレートパラメータ制約

  • Tがデフォルト構築可能であり、*thisに対してコピー挿入可能であること

効果

szがコンテナの要素数以下の場合、後ろから超過している要素を削除する。 szがコンテナの要素数より大きい場合、不足している分だけ末尾に要素を挿入する。挿入する要素の値を指定しない場合(つまり1引数版を使用する場合)、値初期化されたT型の値が挿入される。2引数版の場合は、値cのコピーが挿入される。

戻り値

なし

#include <iostream>
#include <list>
#include <algorithm>

int main()
{
  // 増加
  {
    std::list<int> ls = {3, 1, 4};
    ls.resize(5);

    std::for_each(ls.begin(), ls.end(), [](int x) { std::cout << x << std::endl; });
  }
  std::cout << std::endl;

  // 減少
  {
    std::list<int> ls = {3, 1, 4};
    ls.resize(1);

    std::for_each(ls.begin(), ls.end(), [](int x) { std::cout << x << std::endl; });
  }
}
  • resize[color ff0000]
  • ls.begin()[link begin.md]
  • ls.end()[link end.md]

出力

3
1
4
0
0

3

参照

  • P3372R3 constexpr containers and adaptors
  • LWG Issue 868. Default construction and value-initialization
    • C++11の策定時に、値を指定しないresize(sz)の要素追加が「デフォルト構築」から「値初期化」へ改められた。ドラフト段階の文言では組み込み型の要素が未初期化になりうるものだったため(値を指定するC++98のresize(sz, T())とは挙動は変わらない)
  • LWG Issue 1420. Effects of resize(size()) on a list
    • C++11で、効果の条件がsz <= size()へ修正された。C++11のドラフトではsz < size()size() < szのみが規定されており、sz == size()の場合の効果が規定されていなかったため。この条件は現在の規格でもsz <= size()のままである(sz == size()の場合、削除される要素は0個となる)