名前空間
変種
操作

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()関数は以下のいずれかを行います:

  • vallocの前に挿入し, 挿入された要素へのイテレータを返す
  • valnum個のコピーを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

関連トピック: assign, erase, push_back, insert