名前空間
変種
操作

std::vector<T,Allocator>::insert

提供: cppreference.com
< cpp‎ | container‎ | vector
 
 
 
 
(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) との曖昧さを回避するため、このオーバーロードは、InputItLegacyInputIterator を満たす場合にのみ、オーバーロード解決に参加します。 (C++11以上)
first および last*this 内を指す場合、動作は未定義です。
5) pos の前に初期化子リスト ilist から要素を挿入します。

新しい size() が古い capacity() より大きい場合、再確保が発生します。新しい size()capacity() より大きい場合は、すべてのイテレータおよび参照が無効化されます。 そうでなければ、挿入位置より前のイテレータおよび参照のみが有効なまま残されます。 終端イテレータも無効化されます。

目次

[編集] 引数

pos - 前に内容が挿入されるイテレータ。 posend() イテレータでも構いません
value - 挿入する要素の値
first, last - 挿入する要素の範囲。 insert が呼ばれたコンテナ内を指すイテレータは使用できません
ilist - 挿入する値の初期化子リスト
型の要件
-
オーバーロード (1) を使用するためには TCopyAssignable および CopyInsertable の要件を満たさなければなりません。
-
オーバーロード (2) を使用するためには TMoveAssignable および MoveInsertable の要件を満たさなければなりません。
-
オーバーロード (3) を使用するためには TCopyAssignable および CopyInsertable の要件を満たさなければなりません。
-
オーバーロード (4,5) を使用するためには TEmplaceConstructible の要件を満たさなければなりません。
-
オーバーロード (4) を使用するためには TMoveAssignable および MoveInsertable の要件を満たさなければなりません。 InputItLegacyInputIterator を満たし LegacyForwardIterator を満たさない場合のにのみ要求されます (C++17未満)
-
オーバーロード (4,5) を使用するためには TSwappable, 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>::valuetrue の場合、効果はありません (強い例外保証)。

#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)
要素をその場で構築します
(パブリックメンバ関数) [edit]
要素を末尾に追加します
(パブリックメンバ関数) [edit]