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_iterator
s. 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. |
operador++ | 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 retorno
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 retorno
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 retorno
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::operator=
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 retorno
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++