- 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())とは挙動は変わらない)
- C++11の策定時に、値を指定しない
- LWG Issue 1420. Effects of
resize(size())on alist- C++11で、効果の条件が
sz <= size()へ修正された。C++11のドラフトではsz < size()とsize() < szのみが規定されており、sz == size()の場合の効果が規定されていなかったため。この条件は現在の規格でもsz <= size()のままである(sz == size()の場合、削除される要素は0個となる)
- C++11で、効果の条件が