back_insert_iterator クラス

出力反復子の要件を満たす反復子アダプターについて説明します。 シーケンスのバック エンドに要素を上書きではなく、挿入し、C++ のシーケンス コンテナーの反復子が提供する上書きセマンティクスとは異なるセマンティクスを提供します。 back_insert_iterator クラスはコンテナーの型でテンプレート化されます。

構文

template <class Container>
class back_insert_iterator;

パラメーター

コンテナー
要素が back_insert_iterator によって後方に挿入されるコンテナーの型。

解説

コンテナーは償却定数時間でシーケンスの末尾に要素を挿入できる、有効な後方挿入シーケンスの要件を満たしている必要があります。 deque クラスlist クラスvector クラスによって定義された、C++ 標準ライブラリ シーケンス コンテナーは、push_back メンバー関数を提供し、次の要件を満たします。 これら 3 つのコンテナーと文字列は、それぞれ s で back_insert_iterator使用するように調整できます。 back_insert_iterator は、常に、コンテナーで初期化されている必要があります。

コンストラクター

コンストラクター 説明
back_insert_iterator コンテナー内の最後の要素の後に要素を挿入する back_insert_iterator を構築します。

Typedefs

型名 説明
container_type back_insert_iterator にコンテナーを提供する型。
参照先 back_insert_iterator に参照を提供する型。

演算子

演算子 説明
operator* 後方挿入のための出力反復子式 * i = x を実装するために使用される逆参照演算子。
operator++ 値を格納できる次の位置に back_insert_iterator をインクリメントします。
operator= 後方挿入のための出力反復子式 * i = x を実装するために使用される代入演算子。

必要条件

ヘッダー:<iterator>

名前空間: std

back_insert_iterator::back_insert_iterator

コンテナー内の最後の要素の後に要素を挿入する back_insert_iterator を構築します。

explicit back_insert_iterator(Container& _Cont);

パラメーター

_Cont
back_insert_iterator が要素を挿入するためのコンテナー。

戻り値

パラメーター コンテナーの back_insert_iterator

// back_insert_iterator_back_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The initial vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   // Insertions with member function
   back_inserter ( vec ) = 40;
   back_inserter ( vec ) = 50;

   // Alternatively, insertions can be done with template function
   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 600;
   backiter++;
*backiter = 700;

   cout << "After the insertions, the vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The initial vector vec is: ( 1 2 3 ).
After the insertions, the vector vec is: ( 1 2 3 40 50 600 700 ).

back_insert_iterator::container_type

back_insert_iterator にコンテナーを提供する型。

typedef Container
container_type;

解説

この型は、テンプレート パラメーター Container のシノニムです。

// back_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back (  i );
   }

   vector <int>::iterator vIter;
   cout << "The original vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> >::container_type vec1 = vec;
   back_inserter ( vec1 ) = 40;

   cout << "After the insertion, the vector is: ( ";
   for ( vIter = vec1.begin ( ) ; vIter != vec1.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The original vector vec is: ( 1 2 3 ).
After the insertion, the vector is: ( 1 2 3 40 ).

back_insert_iterator::operator*

出力反復子式* i = x を実装するために使用される逆参照演算子。

back_insert_iterator<Container>& operator*();

戻り値

コンテナーの後ろに挿入される要素への参照。

解説

出力反復子式 *Iter = value を実装するために使用されます。 Iter がシーケンス内の要素を指す反復子の場合*Iter = 値はその要素を値に置き換え、シーケンス内の要素の合計数は変更しません。

// back_insert_iterator_back_insert.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
   backiter++;      // Increment to the next element
*backiter = 20;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The vector vec is: ( 1 2 3 ).
After the insertions, the vector vec becomes: ( 1 2 3 10 20 ).

back_insert_iterator::operator++

値を格納できる次の位置に back_insert_iterator をインクリメントします。

back_insert_iterator<Container>& operator++();
back_insert_iterator<Container> operator++(int);

戻り値

値を格納できる次の位置をアドレス指定する back_insert_iterator

解説

preincrementation と postincrementation の演算子は、どちらも同じ結果を返します。

// back_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 3 ; ++i )
   {
      vec.push_back ( 10 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 30;
   backiter++;      // Increment to the next element
*backiter = 40;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The vector vec is: ( 10 20 ).
After the insertions, the vector vec becomes: ( 10 20 30 40 ).

back_insert_iterator::operator=

値をコンテナーのバック エンドに追加またはプッシュします。

back_insert_iterator<Container>& operator=(typename Container::const_reference val);
back_insert_iterator<Container>& operator=(typename Container::value_type&& val);

パラメーター

val
コンテナーに挿入される値。

戻り値

コンテナーの後ろに挿入される最後の要素への参照。

解説

1 つ目のメンバー演算子は、Container.push_back( val) を評価し、

そして *thisを返します。 2 つ目のメンバー演算子は次の評価をします。

container->push_back((typename Container::value_type&&)val),

そして *thisを返します。

// back_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
   backiter++;      // Increment to the next element
*backiter = 20;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}

back_insert_iterator::reference

back_insert_iterator に参照を提供する型。

typedef typename Container::reference reference;

解説

この型は、関連するコンテナーによって制御されるシーケンスの要素への参照を示します。

// back_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> >::reference
        RefLast = *(vec.end ( ) - 1 );
   cout << "The last element in the vector vec is: "
        << RefLast << "." << endl;
}
The vector vec is: ( 1 2 3 ).
The last element in the vector vec is: 3.

関連項目

<iterator>
C++ 標準ライブラリ内のスレッド セーフ
C++ 標準ライブラリ リファレンス