insert
提供:cppreference.com
文法:
#include <vector> iterator insert( iterator loc, const T& val ); void insert( iterator loc, size_type num, const T& val ); void insert( iterator loc, input_iterator start, input_iterator end );
insert()関数は以下のいずれかを行います:
- valをlocの前に挿入し, 挿入された要素へのイテレータを返す
- valのnum個のコピーをlocの前に挿入
- startからendまでの要素をlocの前に挿入
ベクタの基盤とする構造は配列なので、要素の挿入は相対的に重い処理になりうることに注意して下さい。配列に要素を挿入するためには多数の要素をずらさなければいけないかもしれず、その処理には linear timeがかかります。もし大量の挿入動作が必要となることが分かっているならば、リンクリストに基づいたコンテナ( listや dequeなど)を使った方がよいでしょう。
例として、次のコードでは文字'C'の4個のコピーを文字のベクタに挿入するためにinsert()関数を使っています:
// ベクタを作り、最初の10個のアルファベットを追加 vector<char> alphaVector; for( int i=0; i < 10; i++ ) { alphaVector.push_back( i + 'A' ); } // 4個の'C'を挿入 vector<char>::iterator theIterator = alphaVector.begin(); alphaVector.insert( theIterator, 4, 'C' ); // ベクタを表示 for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); ++theIterator ) { cout << *theIterator; }
以下が出力です:
CCCCABCDEFGHIJ
もうひとつ例を紹介しましょう。このコードでは、insert()はあるベクタの内容を他のベクタの最後尾に追加するのに用いられています:
vector<int> v1; v1.push_back( 0 ); v1.push_back( 1 ); v1.push_back( 2 ); v1.push_back( 3 ); vector<int> v2; v2.push_back( 5 ); v2.push_back( 6 ); v2.push_back( 7 ); v2.push_back( 8 ); cout << "Before, v2 is: "; for( vector<int>::size_type i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; } cout << endl; v2.insert( v2.end(), v1.begin(), v1.end() ); cout << "After, v2 is: "; for( vector<int>::size_type i = 0; i < v2.size(); i++ ) { cout << v2[i] << " "; } cout << endl;
上を実行すると、以下を出力します:
Before, v2 is: 5 6 7 8 After, v2 is: 5 6 7 8 0 1 2 3