std::vector<T,Allocator>::insert - cppreference.com
提供: cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
| (1) | ||
|
|
(C++11未満) | |
|
|
(C++11以上) | |
|
|
(2) | (C++11以上) |
| (3) | ||
|
|
(C++11未満) | |
|
|
(C++11以上) | |
| (4) | ||
|
|
(C++11未満) | |
|
|
(C++11以上) | |
|
|
(5) | (C++11以上) |
コンテナ内の指定された位置に要素を挿入します。
1-2) pos の前に value を挿入します。
3) pos の前に value のコピーを count 個挿入します。
4) pos の前に範囲 [first, last) から要素を挿入します。
InputIt が整数型の場合、このオーバーロードはオーバーロード (3) と同じ効果を持ちます。 |
(C++11未満) |
オーバーロード (3) との曖昧さを回避するため、このオーバーロードは、InputIt が LegacyInputIterator を満たす場合にのみ、オーバーロード解決に参加します。 |
(C++11以上) |
first および last が *this 内を指す場合、動作は未定義です。
5) pos の前に初期化子リスト ilist から要素を挿入します。
新しい size() が古い capacity() より大きい場合、再確保が発生します。新しい size() が capacity() より大きい場合は、すべてのイテレータおよび参照が無効化されます。 そうでなければ、挿入位置より前のイテレータおよび参照のみが有効なまま残されます。 終端イテレータも無効化されます。
引数
| pos | - | 前に内容が挿入されるイテレータ。 pos は end() イテレータでも構いません
|
| value | - | 挿入する要素の値 |
| first, last | - | 挿入する要素の範囲。 insert が呼ばれたコンテナ内を指すイテレータは使用できません |
| ilist | - | 挿入する値の初期化子リスト |
| 型の要件 | ||
-オーバーロード (1) を使用するためには T は CopyAssignable および CopyInsertable の要件を満たさなければなりません。
| ||
-オーバーロード (2) を使用するためには T は MoveAssignable および MoveInsertable の要件を満たさなければなりません。
| ||
-オーバーロード (3) を使用するためには T は CopyAssignable および CopyInsertable の要件を満たさなければなりません。
| ||
-オーバーロード (4,5) を使用するためには T は EmplaceConstructible の要件を満たさなければなりません。
| ||
-オーバーロード (4) を使用するためには T は MoveAssignable および MoveInsertable の要件を満たさなければなりません。 InputIt が LegacyInputIterator を満たし LegacyForwardIterator を満たさない場合のにのみ要求されます (C++17未満)
| ||
-オーバーロード (4,5) を使用するためには T は Swappable, MoveAssignable, MoveConstructible および MoveInsertable の要件を満たさなければなりません。 (C++17以上)
| ||
戻り値
1-2) 挿入された value を指すイテレータ。
3) 挿入された最初の要素を指すイテレータ、または count==0 の場合は pos。
4) 挿入された最初の要素を指すイテレータ、または first==last の場合は pos。
5) 挿入された最初の要素を指すイテレータ、または ilist が空の場合は pos。
計算量
1-2) 定数時間プラス pos とコンテナの終端との距離の線形時間。
3) count の線形時間プラス pos とコンテナの終端との距離の線形時間。
4) std::distance(first, last) の線形時間プラス pos とコンテナの終端との距離の線形時間。
5) ilist.size() の線形時間プラス pos とコンテナの終端との距離の線形時間。
例外
終端に単一の要素が挿入されるときに例外が投げられ、 T が CopyInsertable または std::is_nothrow_move_constructible<T>::value が true の場合、効果はありません (強い例外保証)。
例
#include <iostream> #include <vector> void print_vec(const std::vector<int>& vec) { for (auto x: vec) { std::cout << ' ' << x; } std::cout << '\n'; } int main () { std::vector<int> vec(3,100); print_vec(vec); auto it = vec.begin(); it = vec.insert(it, 200); print_vec(vec); vec.insert(it,2,300); print_vec(vec); // "it" no longer valid, get a new one: it = vec.begin(); std::vector<int> vec2(2,400); vec.insert(it+2, vec2.begin(), vec2.end()); print_vec(vec); int arr[] = { 501,502,503 }; vec.insert(vec.begin(), arr, arr+3); print_vec(vec); }
出力:
100 100 100 200 100 100 100 300 300 200 100 100 100 300 300 400 400 200 100 100 100 501 502 503 300 300 400 400 200 100 100 100