Classe insert_iterator
Descreve um adaptador de iterador que atende aos requisitos de um iterador de saída. Ela insere, em vez de substituir, elementos em uma sequência. Além disso, fornece semânticas diferentes da semântica de substituição fornecida pelos iteradores dos contêineres associativos e de sequência do C++. A classe insert_iterator
é modelada no tipo do contêiner que está sendo adaptado.
Sintaxe
template <class Container>
class insert_iterator;
Parâmetros
Contêiner
O tipo de contêiner no qual os elementos deverão ser inseridos por um insert_iterator
.
Comentários
O contêiner do tipo Container
precisa atender aos requisitos de um contêiner de tamanho variável e ter uma função membro de inserção de dois argumentos, em que os parâmetros sejam do tipo Container::iterator
e Container::value_type
e que retorne um tipo Container::iterator
. Os contêineres associativos classificados e de sequência da Biblioteca Padrão do C++ atendem a esses requisitos e podem ser adaptados para uso com insert_iterator
s. Para contêineres associativos, o argumento de posição é tratado como uma dica, que tem o potencial de aumentar ou degradar o desempenho, dependendo da qualidade da dica. Um insert_iterator
sempre deve ser inicializado com seu contêiner.
Construtores
Construtor | Descrição |
---|---|
insert_iterator | Constrói um insert_iterator que insere um elemento em uma posição especificada em um contêiner. |
Typedefs
Nome do tipo | Descrição |
---|---|
container_type | Um tipo que representa o contêiner no qual uma inserção geral 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 desreferenciamento usado para implementar a expressão do iterador de saída * i = x para uma inserção geral. |
operador++ | Incrementa o 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 geral. |
Requisitos
Cabeçalho: <iterator>
Namespace: std
insert_iterator::container_type
Um tipo que representa o contêiner no qual uma inserção geral deve ser feita.
typedef Container container_type;
Comentários
O tipo é um sinônimo do parâmetro de modelo Container.
Exemplo
// insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L1;
insert_iterator<list<int> >::container_type L2 = L1;
inserter ( L2, L2.end ( ) ) = 20;
inserter ( L2, L2.end ( ) ) = 10;
inserter ( L2, L2.begin ( ) ) = 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 20 10 ).
*/
insert_iterator::insert_iterator
Constrói um insert_iterator
que insere um elemento em uma posição especificada em um contêiner.
insert_iterator(Container& _Cont, typename Container::iterator _It);
Parâmetros
_Cont
O contêiner no qual o insert_iterator
deve inserir elementos.
_It
A posição da inserção.
Comentários
Todos os contêineres têm a função membro de inserção chamada pelo insert_iterator
. Para contêineres associativos, o parâmetro de posição é apenas uma sugestão. A função de inserção fornece uma maneira conveniente de inserir valores.
Exemplo
// insert_iterator_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 < 4 ; ++i )
{
L.push_back ( 10 * 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
inserter ( L, L.begin ( ) ) = 2;
// Alternatively, you may use the template version
insert_iterator< list < int> > Iter(L, L.end ( ) );
*Iter = 300;
cout << "After the 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:
( 10 20 30 ).
After the insertions, the list L is:
( 2 10 20 30 300 ).
*/
insert_iterator::operador*
Cancela a referência do iterador de inserção, retornando o elemento que é seu alvo.
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
// insert_iterator_op_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 = 0 ; i < 4 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The original list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/
insert_iterator::operador++
Incrementa o insert_iterator
para o próximo local no qual um valor pode ser armazenado.
insert_iterator<Container>& operator++();
insert_iterator<Container> operator++(int);
Parâmetros
Um 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
// insert_iterator_op_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
int main( )
{
using namespace std;
int i;
vector<int> vec;
for (i = 1 ; i < 5 ; ++i )
{
vec.push_back ( i );
}
vector <int>::iterator vIter;
cout << "The vector vec is:\n ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
insert_iterator<vector<int> > ii ( vec, vec.begin ( ) );
*ii = 30;
ii++;
*ii = 40;
ii++;
*ii = 50;
cout << "After the insertions, the vector vec becomes:\n ( ";
for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++ )
cout << *vIter << " ";
cout << ")." << endl;
}
/* Output:
The vector vec is:
( 1 2 3 4 ).
After the insertions, the vector vec becomes:
( 30 40 50 1 2 3 4 ).
*/
insert_iterator::operador=
Insere um valor no contêiner e retorna o iterador atualizado para apontar para o novo elemento.
insert_iterator<Container>& operator=(
typename Container::const_reference val,);
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 elemento inserido no contêiner.
Comentários
O primeiro operador membro avalia
Iter = container->insert(Iter, val)
;
++Iter;
em seguida, retorna *this
.
O segundo operador membro avalia
Iter = container->insert(Iter, std::move(val));
++Iter;
em seguida, retorna *this
.
Exemplo
// insert_iterator_op_assign.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 = 0 ; i < 4 ; ++i )
{
L.push_back ( 2 * i );
}
cout << "The original list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
insert_iterator< list < int> > Iter(L, L.begin ( ) );
*Iter = 10;
*Iter = 20;
*Iter = 30;
cout << "After the insertions, the list L is:\n ( ";
for ( L_Iter = L.begin( ) ; L_Iter != L.end( ); L_Iter++ )
cout << *L_Iter << " ";
cout << ")." << endl;
}
/* Output:
The original list L is:
( 0 2 4 6 ).
After the insertions, the list L is:
( 10 20 30 0 2 4 6 ).
*/
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;
Comentários
O tipo descreve uma referência a um elemento da sequência controlada pelo contêiner associado.
Exemplo
// insert_iterator_container_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> L;
insert_iterator<list<int> > iivIter( L , L.begin ( ) );
*iivIter = 10;
*iivIter = 20;
*iivIter = 30;
list<int>::iterator LIter;
cout << "The list L is: ( ";
for ( LIter = L.begin ( ) ; LIter != L.end ( ); LIter++ )
cout << *LIter << " ";
cout << ")." << endl;
insert_iterator<list<int> >::reference
RefFirst = *(L.begin ( ));
cout << "The first element in the list L is: "
<< RefFirst << "." << endl;
}
/* Output:
The list L is: ( 10 20 30 ).
The first element in the list L is: 10.
*/
Confira também
<iterator>
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++