Classe front_insert_iterator
Descreve um adaptador de iterador que atende aos requisitos de um iterador de saída. Ela insere, em vez de substituir, elementos na frente de uma sequência. Além disso, fornece semânticas diferentes da semântica de substituição fornecida pelos iteradores dos contêineres de sequência do C++. A classe front_insert_iterator
é modelada no tipo do contêiner.
Sintaxe
template <class Container>
class front_insert_iterator;
Parâmetros
Contêiner
O tipo de contêiner na parte da frente dos elementos a serem inseridos por um front_insert_iterator
.
Comentários
O contêiner deve atender aos requisitos de uma sequência de inserção anterior em que é possível inserir elementos no início da sequência em tempo constante amortizado. Os contêineres de sequência da Biblioteca Padrão C++ definidos pela classe deque e pela classe list fornecem a função membro push_front
necessária e atendem a esses requisitos. Por outro lado, contêineres de sequência definidos pela classe vector não atendem a esses requisitos e não podem ser adaptados para uso com front_insert_iterator
s. Um front_insert_iterator
sempre deve ser inicializado com seu contêiner.
Construtores
Construtor | Descrição |
---|---|
front_insert_iterator | Cria um iterador que pode inserir elementos na frente de um objeto de contêiner especificado. |
Typedefs
Nome do tipo | Descrição |
---|---|
container_type | Um tipo que representa o contêiner no qual uma inserção anterior deve ser feita. |
referência | Um tipo que fornece uma referência a um elemento em uma sequência controlada pelo contêiner associado. |
Operadores
Operador | Descrição |
---|---|
operator* | Operador de cancelamento de referência usado para implementar a expressão do iterador de saída * i = x para uma inserção anterior. |
operador++ | Incrementa o front_insert_iterator para o próximo local no qual um valor pode ser armazenado. |
operator= | Operador de atribuição usado para implementar a expressão do iterador de saída * i = x para uma inserção anterior. |
Requisitos
Cabeçalho: <iterator>
Namespace: std
front_insert_iterator::container_type
Um tipo que representa o contêiner no qual uma inserção anterior deve ser feita.
typedef Container container_type;
Comentários
O tipo é um sinônimo do parâmetro de modelo Container.
Exemplo
// 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
Cria um iterador que pode inserir elementos na frente de um objeto de contêiner especificado.
explicit front_insert_iterator(Container& _Cont);
Parâmetros
_Cont
O objeto de contêiner no qual o front_insert_iterator
deve inserir elementos.
Valor de retorno
Um front_insert_iterator
para o objeto de contêiner do parâmetro.
Exemplo
// 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::operador*
Cancela a referência do iterador de inserção, retornando o elemento que é seu alvo.
front_insert_iterator<Container>& operator*();
Valor de retorno
A função membro retorna o valor do elemento de destino.
Comentários
Usado para implementar a expressão do iterador de saída *Iter = valor. Se Iter
for um iterador que trata de um elemento em uma sequência, *Iter = valor substituirá esse elemento pelo valor e não alterará o número total de elementos na sequência.
Exemplo
// 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::operador++
Incrementa o back_insert_iterator
para o próximo local no qual um valor pode ser armazenado.
front_insert_iterator<Container>& operator++();
front_insert_iterator<Container> operator++(int);
Valor de retorno
Um front_insert_iterator
que trata do próximo local no qual um valor pode ser armazenado.
Comentários
Os operadores pré-incremento e pós-incremento retornam o mesmo resultado.
Exemplo
// 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=
Acrescenta (envia por push) um valor à frente do contêiner.
front_insert_iterator<Container>& operator=(typename Container::const_reference val);
front_insert_iterator<Container>& operator=(typename Container::value_type&& val);
Parâmetros
val
O valor a ser atribuído ao contêiner.
Valor de retorno
Uma referência ao último elemento inserido na frente do contêiner.
Comentários
O primeiro operador membro avalia container.push_front( val)
e retorna *this
.
O segundo operador membro avalia
container->push_front((typename Container::value_type&&) val)
,
em seguida, retorna *this
.
Exemplo
// 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::Referência
Um tipo que fornece uma referência a um elemento em uma sequência controlada pelo contêiner associado.
typedef typename Container::reference reference;
Exemplo
// 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.
*/
Confira também
<iterator>
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++