insert_iterator (Clase)
Describe un adaptador de iterador que satisface los requisitos de un iterador de salida. Inserta, en lugar de sobrescribir, elementos en una secuencia. Proporciona así la semántica que es diferente de la semántica que sobrescribe proporcionada por los iteradores de la secuencia de C++ y los contenedores asociativos. La clase insert_iterator
se hace plantilla en el tipo de contenedor que se adapta.
Sintaxis
template <class Container>
class insert_iterator;
Parámetros
Contenedor
Tipo de contenedor en el que un insert_iterator
debe insertar los elementos.
Comentarios
El contenedor de tipo Container
debe satisfacer los requisitos de un contenedor de tamaño variable y tener una función miembro insert de dos argumentos donde los parámetros son de tipo Container::iterator
y Container::value_type
y se devuelve un tipo Container::iterator
. Los contenedores asociativos ordenados y de secuencia de la biblioteca estándar de C++ cumplen estos requisitos y pueden adaptarse para su uso con insert_iterator
. En los contenedores asociativos, el argumento de posición se trata como una sugerencia, algo que tiene potencial para mejorar o degradar el rendimiento, según la calidad de la sugerencia. Un insert_iterator
debe inicializarse siempre con su contenedor.
Constructores
Constructor | Descripción |
---|---|
insert_iterator | Construye insert_iterator que inserta un elemento en una posición especificada de un contenedor. |
Typedefs
Nombre de tipo | Descripción |
---|---|
container_type | Tipo que representa el contenedor en el que se va a crear una inserción general. |
referencia | Tipo que proporciona una referencia a un elemento de una secuencia controlada por el contenedor asociado. |
Operadores
Operador | Descripción |
---|---|
operator* | Operador de desreferencia usado para implementar la expresión del iterador de salida * i = x para una inserción general. |
operator++ | Incrementa el 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 del iterador de salida * i = x para una inserción general. |
Requisitos
Encabezado: <iterator>
Espacio de nombres: std
insert_iterator::container_type
Tipo que representa el contenedor en el que se va a crear una inserción general.
typedef Container container_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla Container.
Ejemplo
// 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
Construye insert_iterator
que inserta un elemento en una posición especificada de un contenedor.
insert_iterator(Container& _Cont, typename Container::iterator _It);
Parámetros
_Cont
Contenedor en el que insert_iterator
va a insertar elementos.
_It
Posición de la inserción.
Comentarios
Todos los contenedores tienen la función miembro insert a la que llama insert_iterator
. En el caso de los contenedores asociativos, el parámetro de posición es simplemente una sugerencia. La función inserter ofrece una manera cómoda de insertar valores.
Ejemplo
// 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::operator*
Desreferencia el iterador de inserción que devuelve el elemento direccionado.
insert_iterator<Container>& operator*();
Valor devuelto
La función miembro devuelve el valor del elemento al que se dirige.
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
// 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::operator++
Incrementa el insert_iterator
a la siguiente ubicación en la que puede almacenarse un valor.
insert_iterator<Container>& operator++();
insert_iterator<Container> operator++(int);
Parámetros
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
// 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::operator=
Inserta un valor en el contenedor y devuelve el iterador actualizado para apuntar al nuevo elemento.
insert_iterator<Container>& operator=(
typename Container::const_reference val,);
insert_iterator<Container>& operator=(
typename Container::value_type&& val);
Parámetros
val
Valor que se va a asignar al contenedor.
Valor devuelto
Referencia al elemento insertado en el contenedor.
Comentarios
El primer operador miembro evalúa
Iter = container->insert(Iter, val)
;
++Iter;
después, devuelve *this
.
El segundo operador miembro evalúa
Iter = container->insert(Iter, std::move(val));
++Iter;
después, devuelve *this
.
Ejemplo
// 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::reference
Tipo que proporciona una referencia a un elemento de una secuencia controlada por el contenedor asociado.
typedef typename Container::reference reference;
Comentarios
El tipo describe una referencia a un elemento de la secuencia controlada por el contenedor asociado.
Ejemplo
// 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.
*/
Vea también
<iterator>
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++