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 | 類型,表示要執行前端插入的容器。 |
reference | 類型,提供關聯容器控制之序列中項目的參考。 |
操作員
運算子 | 描述 |
---|---|
operator* | 取值運算子,用來實作輸出迭代器運算式 * i = x 以進行前端插入。 |
operator++ | 將 front_insert_iterator 遞增至可儲存值的下一個位置。 |
operator= | 指派運算子,用來實作輸出迭代器運算式 * i = x 以進行前端插入。 |
需求
標頭: <反覆運算器>
命名空間: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);
參數
_續
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 = 值。 如果 Iter
是尋址序列中元素的反覆運算器,則 *Iter = 值會以值取代該專案,而且不會變更序列中的元素總數。
範例
// 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
要指派給容器的值。
傳回值
插入容器前端之最後一個元素的參考。
備註
第一個成員運算子會評估 container.push_front( val)
,然後傳回 *this
。
在第二個成員運算子會評估
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.
*/