front_insert_iterator クラス
出力反復子の要件を満たす反復子アダプターについて説明します。 要素を上書きするのではなく、シーケンスの先頭に挿入します。 したがって、C++ シーケンス コンテナーの反復子によって提供される上書きセマンティクスとは異なるセマンティクスが提供されます。 front_insert_iterator
クラスはコンテナーの型でテンプレート化されます。
構文
template <class Container>
class front_insert_iterator;
パラメーター
コンテナー
要素が front_insert_iterator
によって前方に挿入されるコンテナーの型。
解説
コンテナーは償却定数時間でシーケンスの先頭に要素を挿入できる、有効な前方挿入シーケンスの要件を満たしている必要があります。 deque クラスと list クラスによって定義された、C++標準ライブラリのシーケンス コンテナーは、必要な push_front
メンバー関数を提供し、次の要件を満たします。 これに対し、 ベクトル クラスによって定義されたシーケンス コンテナー はこれらの要件を満たせず、 front_insert_iterator
で使用するように調整することはできません。 front_insert_iterator
は、常に、コンテナーで初期化されている必要があります。
コンストラクター
コンストラクター | 説明 |
---|---|
front_insert_iterator | 指定されたコンテナー オブジェクトの前に要素を挿入できる反復子を作成します。 |
Typedefs
型名 | 説明 |
---|---|
container_type | 前方挿入の対象となるコンテナーを表す型。 |
参照先 | 関連するコンテナーによって制御されるシーケンスの要素への参照を提供する型。 |
演算子
演算子 | 説明 |
---|---|
operator* | 前方挿入のための出力反復子式 * i = x を実装するために使用される逆参照演算子。 |
operator++ | 値を格納できる次の位置に front_insert_iterator をインクリメントします。 |
operator= | 前方挿入のための出力反復子式 * i = x を実装するために使用される代入演算子。 |
要件
ヘッダー: <iterator>
名前空間: std
front_insert_iterator::container_type
前方挿入の対象となるコンテナーを表す型。
typedef Container container_type;
解説
この型は、テンプレート パラメーター Container のシノニムです。
例
// front_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> >::container_type L2 = L1;
front_inserter ( L2 ) = 20;
front_inserter ( L2 ) = 10;
front_inserter ( L2 ) = 40;
list <int>::iterator vIter;
cout << "The list L2 is: ( ";
for ( vIter = L2.begin ( ) ; vIter != L2.end ( ); vIter++)
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L2 is: ( 40 10 20 ).
*/
front_insert_iterator::front_insert_iterator
指定されたコンテナー オブジェクトの前に要素を挿入できる反復子を作成します。
explicit front_insert_iterator(Container& _Cont);
パラメーター
_Cont
front_insert_iterator
によって要素が挿入されるオブジェクト コンテナーです。
戻り値
パラメーター コンテナー オブジェクトの front_insert_iterator
。
例
// front_insert_iterator_front_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
int i;
list <int>::iterator L_Iter;
list<int> L;
for (i = -1 ; i < 9 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
// Using the member function to insert an element
front_inserter ( L ) = 20;
// Alternatively, one may use the template function
front_insert_iterator< list < int> > Iter(L);
*Iter = 30;
cout << "After the front insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The list L is:
( -2 0 2 4 6 8 10 12 14 16 ).
After the front insertions, the list L is:
( 30 20 -2 0 2 4 6 8 10 12 14 16 ).
*/
front_insert_iterator::operator*
アドレス指定された要素を返す挿入反復子を逆参照します。
front_insert_iterator<Container>& operator*();
戻り値
このメンバー関数は、アドレス指定された要素の値を返します。
解説
出力反復子式 *Iter = value を実装するために使用されます。 Iter
がシーケンス内の要素を指す反復子の場合、*Iter = value はその要素を値に置き換え、シーケンス内の要素の合計数は変更しません。
例
// front_insert_iterator_deref.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
int i;
list <int>::iterator L_Iter;
list<int> L;
for ( i = -1 ; i < 9 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
front_insert_iterator< list < int> > Iter(L);
*Iter = 20;
// Alternatively, you may use
front_inserter ( L ) = 30;
cout << "After the front insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++)
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The list L is:
( -2 0 2 4 6 8 10 12 14 16 ).
After the front insertions, the list L is:
( 30 20 -2 0 2 4 6 8 10 12 14 16 ).
*/
front_insert_iterator::operator++
値を格納できる次の位置に back_insert_iterator
をインクリメントします。
front_insert_iterator<Container>& operator++();
front_insert_iterator<Container> operator++(int);
戻り値
値を格納できる次の位置をアドレス指定する front_insert_iterator
。
解説
preincrementation と postincrementation の演算子は、どちらも同じ結果を返します。
例
// front_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> > iter ( L1 );
*iter = 10;
iter++;
*iter = 20;
iter++;
*iter = 30;
iter++;
list <int>::iterator vIter;
cout << "The list L1 is: ( ";
for ( vIter = L1.begin ( ) ; vIter != L1.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L1 is: ( 30 20 10 ).
*/
front_insert_iterator::operator=
コンテナーの前に値を追加 (プッシュ) します。
front_insert_iterator<Container>& operator=(typename Container::const_reference val);
front_insert_iterator<Container>& operator=(typename Container::value_type&& val);
パラメーター
val
コンテナーに割り当てられる値。
戻り値
コンテナーの前に挿入される最後の要素への参照。
解説
1 つ目のメンバー演算子は、container.push_front( val)
を評価し、*this
を返します。
2 つ目のメンバー演算子は次の評価をします。
container->push_front((typename Container::value_type&&) val)
,
そして *this
を返します。
例
// front_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
front_insert_iterator<list<int> > iter ( L1 );
*iter = 10;
iter++;
*iter = 20;
iter++;
*iter = 30;
iter++;
list <int>::iterator vIter;
cout << "The list L1 is: ( ";
for ( vIter = L1.begin ( ) ; vIter != L1.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The list L1 is: ( 30 20 10 ).
*/
front_insert_iterator::reference
関連するコンテナーによって制御されるシーケンスの要素への参照を提供する型。
typedef typename Container::reference reference;
例
// front_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L;
front_insert_iterator<list<int> > fiivIter( L );
*fiivIter = 10;
*fiivIter = 20;
*fiivIter = 30;
list<int>::iterator LIter;
cout << "The list L is: ( ";
for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++)
cout << *LIter << " ";
cout << ")." << endl;
front_insert_iterator<list<int> >::reference
RefFirst = *(L.begin ( ));
cout << "The first element in the list L is: "
<< RefFirst << "." << endl;
}
/* Output:
The list L is: ( 30 20 10 ).
The first element in the list L is: 30.
*/