std::deque<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 より小さい場合、以下の処理が行われます:
2)
追加の
value
のコピーが追加されます。
目次 |
パラメータ
| count | - | コンテナの新しいサイズ | ||
| value | - | 新しい要素を初期化する値 | ||
| 型要件 | ||||
-
|
||||
計算量
現在のサイズと count の差に対して線形。
注記
オーバーロード
(
1
)
における値初期化が望ましくない場合、例えば要素が非クラス型でありゼロ初期化が不要な場合、
カスタム
Allocator::construct
を提供することで回避できます。
例
このコードを実行
#include <deque> #include <iostream> void print(auto rem, const std::deque<int>& c) { for (std::cout << rem; const int el : c) std::cout << el << ' '; std::cout << '\n'; } int main() { std::deque<int> c = {1, 2, 3}; print("The deque 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 deque 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 679 | C++98 |
resize()
が
value
を値渡し
|
const参照渡し |
| LWG 1418 | C++98 | resize ( size ( ) ) の動作が未規定 | 規定済み |
| LWG 2033 | C++11 |
1. 要素の削除に
erase()
[1]
を使用
2.
T
が
MoveInsertable
であることが要求されない
|
1.
pop_back()
を使用
2. 要求される |
| LWG 2066 | C++11 |
オーバーロード
(
1
)
に例外安全性保証がない
(オーバーロード ( 2 ) と比較) |
追加済み |
| LWG 2160 | C++11 |
要素の削除に
pop_back()
[2]
を使用
(LWG 2033の解決による) |
要素削除の方法を規定しない
|
-
↑
erase()
は
dequeの中央にある要素を削除できるため、削除されたセクションに続く要素が隙間を埋めるために前方に移動できるように、値型が MoveAssignable であることが要求されます。しかし、resize()はdequeの末尾の要素のみを削除するため、 MoveAssignable は不要となります。 - ↑ pop_back() を使用して要素を削除する場合、要素は末尾から先頭に向かって削除される必要があることを意味します。
関連項目
|
要素の最大可能数を返す
(public member function) |
|
|
要素数を返す
(public member function) |
|
|
コンテナが空かどうかをチェックする
(public member function) |