Compartilhar via


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_iterators. 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++