Compartir vía


back_insert_iterator (Clase)

Describe un adaptador de iterador que satisface los requisitos de un iterador de salida. Inserta, en lugar de sobrescribir, elementos en el final de una secuencia y proporciona así la semántica que es diferente de la semántica que sobrescribe proporcionada por los iteradores de los contenedores de la secuencia de C++. La clase back_insert_iterator se hace plantilla en el tipo de contenedor.

Sintaxis

template <class Container>
class back_insert_iterator;

Parámetros

Contenedor
El tipo de contenedor en cuyo final back_insert_iterator va a insertar los elementos.

Comentarios

El contenedor debe satisfacer los requisitos para una secuencia de inserción en el final donde sea posible insertar elementos al final de la secuencia en tiempo constante amortizado. Los contenedores de secuencia de la biblioteca estándar de C++ definidos por las clases deque, list y vector proporcionan la función miembro push_back necesaria y satisfacen estos requisitos. Estos tres contenedores y las cadenas se pueden adaptar para su uso con back_insert_iterator. Un back_insert_iterator debe inicializarse siempre con su contenedor.

Constructores

Constructor Descripción
back_insert_iterator Construye un back_insert_iterator que inserta elementos después del último elemento de un contenedor.

Typedefs

Nombre de tipo Descripción
container_type Tipo que proporciona un contenedor para back_insert_iterator.
referencia Tipo que proporciona una referencia para back_insert_iterator.

Operadores

Operador Descripción
operator* Operador de desreferencia usado para implementar la expresión de iterador de salida * i = x para una inserción al final.
operator++ Incrementa el back_insert_iterator a la siguiente ubicación en la que puede almacenarse un valor.
operator= Operador de asignación usado para implementar la expresión de iterador de salida * i = x para una inserción al final.

Requisitos

Encabezado: <iterator>

Espacio de nombres: std

back_insert_iterator::back_insert_iterator

Construye un back_insert_iterator que inserta elementos después del último elemento de un contenedor.

explicit back_insert_iterator(Container& _Cont);

Parámetros

_Cont
Contenedor en el que back_insert_iterator va a insertar un elemento.

Valor devuelto

back_insert_iterator para el contenedor del parámetro.

Ejemplo

// 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

Tipo que proporciona un contenedor para back_insert_iterator.

typedef Container
container_type;

Comentarios

El tipo es un sinónimo del parámetro de plantilla Container.

Ejemplo

// 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::operator*

Operador de desreferencia usado para implementar la expresión de iterador de salida * i = x.

back_insert_iterator<Container>& operator*();

Valor devuelto

Referencia al elemento insertado al final del contenedor.

Comentarios

Se usa para implementar la expresión de iterador de salida *Iter = value. Si Iter es un iterador que dirige un elemento de una secuencia, *Iter = value sustituye ese elemento por el valor y no cambia el número total de elementos de la secuencia.

Ejemplo

// 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::operator++

Incrementa el back_insert_iterator a la siguiente ubicación en la que puede almacenarse un valor.

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

Valor devuelto

back_insert_iterator que dirige a la siguiente ubicación en la que se puede almacenar un valor.

Comentarios

Ambos operadores de incremento previo e incremento posterior devuelven el mismo resultado.

Ejemplo

// 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 o inserta un valor en el extremo final de un contenedor.

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

Parámetros

val
Valor que se va a insertar en el contenedor.

Valor devuelto

Referencia al último elemento insertado al final del contenedor.

Comentarios

El primer operador miembro evalúa Container.push_back( val),

después, devuelve *this. El segundo operador miembro evalúa

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

después, devuelve *this.

Ejemplo

// 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::reference

Tipo que proporciona una referencia para back_insert_iterator.

typedef typename Container::reference reference;

Comentarios

El tipo describe una referencia a un elemento de la secuencia controlada por el contenedor asociado.

Ejemplo

// 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.

Vea también

<iterator>
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++