std::vector<T,Allocator>::insert
提供: cppreference.com
(1) | ||
iterator insert( iterator pos, const T& value ); |
(C++11未満) | |
iterator insert( const_iterator pos, const T& value ); |
(C++11以上) | |
iterator insert( const_iterator pos, T&& value ); |
(2) | (C++11以上) |
(3) | ||
void insert( iterator pos, size_type count, const T& value ); |
(C++11未満) | |
iterator insert( const_iterator pos, size_type count, const T& value ); |
(C++11以上) | |
(4) | ||
template< class InputIt > void insert( iterator pos, InputIt first, InputIt last); |
(C++11未満) | |
template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last ); |
(C++11以上) | |
iterator insert( const_iterator pos, std::initializer_list<T> ilist ); |
(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
とコンテナの終端との距離の線形時間。5) ilist.size() の線形時間プラス
pos
とコンテナの終端との距離の線形時間。[編集] 例外
終端に単一の要素が挿入されるときに例外が投げられ、 T が CopyInsertable または std::is_nothrow_move_constructible<T>::value が true の場合、効果はありません (強い例外保証)。
例
Run this code
#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
[編集] 関連項目
(C++11) |
要素をその場で構築します (パブリックメンバ関数) |
要素を末尾に追加します (パブリックメンバ関数) |