Compartilhar via


Classe back_insert_iterator

Descreve um adaptador de iterador que atende aos requisitos de um iterador de saída. Insere, em vez de substituições, elementos no fim de uma sequência e, dessa forma, fornece semânticas que são diferentes da semântica de substituição fornecida pelos iteradores dos contêineres de sequência do C++. A classe back_insert_iterator é modelada no tipo do contêiner.

Sintaxe

template <class Container>
class back_insert_iterator;

Parâmetros

Contêiner
O tipo de contêiner na parte de trás dos elementos a serem inseridos por um back_insert_iterator.

Comentários

O contêiner deve atender aos requisitos de uma sequência de inserção posterior em que é possível inserir elementos no fim da sequência em tempo constante amortizado. Os contêineres de sequência da Biblioteca Padrão C++ definidos pela Classe deque, Classe list e classe Vector fornecem a função membro push_back necessária e atendem a esses requisitos. Esses três contêineres e as cadeias de caracteres podem ser adaptados para uso com back_insert_iterators. Um back_insert_iterator sempre deve ser inicializado com seu contêiner.

Construtores

Construtor Descrição
back_insert_iterator Constrói um back_insert_iterator que insere elementos depois do último elemento em um contêiner.

Typedefs

Nome do tipo Descrição
container_type Um tipo que fornece um contêiner para back_insert_iterator.
referência Um tipo que fornece uma referência para back_insert_iterator.

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 posterior.
operadora++ Incrementa o back_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 posterior.

Requisitos

Cabeçalho: <iterator>

Namespace: std

back_insert_iterator::back_insert_iterator

Constrói um back_insert_iterator que insere elementos depois do último elemento em um contêiner.

explicit back_insert_iterator(Container& _Cont);

Parâmetros

_Cont
O contêiner em que o back_insert_iterator deve inserir um elemento.

Valor de Devolução

Um back_insert_iterator para o contêiner do parâmetro.

Exemplo

// back_insert_iterator_back_insert_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for ( i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The initial vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   // Insertions with member function
   back_inserter ( vec ) = 40;
   back_inserter ( vec ) = 50;

   // Alternatively, insertions can be done with template function
   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 600;
   backiter++;
*backiter = 700;

   cout << "After the insertions, the vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The initial vector vec is: ( 1 2 3 ).
After the insertions, the vector vec is: ( 1 2 3 40 50 600 700 ).

back_insert_iterator::container_type

Um tipo que fornece um contêiner para back_insert_iterator.

typedef Container
container_type;

Comentários

O tipo é um sinônimo do parâmetro de modelo Container.

Exemplo

// back_insert_iterator_container_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back (  i );
   }

   vector <int>::iterator vIter;
   cout << "The original vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> >::container_type vec1 = vec;
   back_inserter ( vec1 ) = 40;

   cout << "After the insertion, the vector is: ( ";
   for ( vIter = vec1.begin ( ) ; vIter != vec1.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The original vector vec is: ( 1 2 3 ).
After the insertion, the vector is: ( 1 2 3 40 ).

back_insert_iterator::operador*

Operador de desreferenciamento usado para implementar a expressão do iterador de saída * i = x.

back_insert_iterator<Container>& operator*();

Valor de Devolução

Uma referência ao elemento inserido na parte posterior do contêiner.

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

// back_insert_iterator_back_insert.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
   backiter++;      // Increment to the next element
*backiter = 20;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The vector vec is: ( 1 2 3 ).
After the insertions, the vector vec becomes: ( 1 2 3 10 20 ).

back_insert_iterator::Operador++

Incrementa o back_insert_iterator para o próximo local no qual um valor pode ser armazenado.

back_insert_iterator<Container>& operator++();
back_insert_iterator<Container> operator++(int);

Valor de Devolução

Um back_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

// back_insert_iterator_op_incre.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 3 ; ++i )
   {
      vec.push_back ( 10 * i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 30;
   backiter++;      // Increment to the next element
*backiter = 40;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}
The vector vec is: ( 10 20 ).
After the insertions, the vector vec becomes: ( 10 20 30 40 ).

back_insert_iterator::operador=

Anexa ou envia um valor para o back-end de um contêiner.

back_insert_iterator<Container>& operator=(typename Container::const_reference val);
back_insert_iterator<Container>& operator=(typename Container::value_type&& val);

Parâmetros

val
O valor a ser inserido no contêiner.

Valor de Devolução

Uma referência ao último elemento inserido na parte posterior do contêiner.

Comentários

O primeiro operador membro avalia Container.push_back( val),

em seguida, retorna *this. O segundo operador membro avalia

container->push_back((typename Container::value_type&&)val),

em seguida, retorna *this.

Exemplo

// back_insert_iterator_op_assign.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> > backiter ( vec );
*backiter = 10;
   backiter++;      // Increment to the next element
*backiter = 20;
   backiter++;

   cout << "After the insertions, the vector vec becomes: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;
}

back_insert_iterator::referência

Um tipo que fornece uma referência para back_insert_iterator.

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

// back_insert_iterator_reference.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   int i;

   vector<int> vec;
   for (i = 1 ; i < 4 ; ++i )
   {
      vec.push_back ( i );
   }

   vector <int>::iterator vIter;
   cout << "The vector vec is: ( ";
   for ( vIter = vec.begin ( ) ; vIter != vec.end ( ); vIter++)
      cout << *vIter << " ";
   cout << ")." << endl;

   back_insert_iterator<vector<int> >::reference
        RefLast = *(vec.end ( ) - 1 );
   cout << "The last element in the vector vec is: "
        << RefLast << "." << endl;
}
The vector vec is: ( 1 2 3 ).
The last element in the vector vec is: 3.

Confira também

<iterator>
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++