void resize(size_type sz); // (1) C++11
constexpr void resize(size_type sz); // (1) C++20
void resize(size_type sz, const T& c); // (2) C++11
constexpr void resize(size_type sz, const T& c); // (2) C++20
void resize(size_type sz, T c = T()); // (1) + (2) C++98
要件
要素数を変更する
要件
-
(1) :
- 型
Tがデフォルト構築可能であること (C++14) - 型
Tが*thisに対してコピー挿入可能であること (C++11まで) - 型
Tが*thisに対してムーブ挿入可能であること (C++14)
- 型
-
(2) :
- 型
Tが*thisに対してコピー挿入可能であること (C++14)
- 型
効果
-
(1) :
-
(2) :
戻り値
なし
備考
例
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
// 増加
{
std::vector<int> v = {3, 1, 4};
v.resize(5);
std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << std::endl; });
}
std::cout << std::endl;
// 減少
{
std::vector<int> v = {3, 1, 4};
v.resize(1);
std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << std::endl; });
}
}
出力
3
1
4
0
0
3
参照
- LWG Issue 868. Default construction and value-initialization
- LWG Issue 1525. Effects of
resize(size())on avector- C++11で、効果の条件が
sz <= size()へ修正された。C++11のドラフトではsz < size()とsize() < szのみが規定されており、sz == size()の場合の効果が規定されていなかったため(C++98ではelse ; // do nothingと明記されていた)。なお現在の規格では、sz < size()でない場合にsz - size()個(sz == size()なら0個)を追加すると規定されており、どの版でもsz == size()ならコンテナは変更されない
- C++11で、効果の条件が
- LWG Issue 2033. Preconditions of
reserve,shrink_to_fit, andresizefunctions - P1004R2 Making
std::vectorconstexpr - LWG Issue 2160. Unintended destruction ordering-specification of
resize - LWG Issue 2323.
vector::resize(n, t)'s specification should be simplified