Clase list
La clase list de la Biblioteca estándar de C++ es una plantilla de clase de contenedores de secuencias que mantienen sus elementos en disposición lineal y permiten realizar inserciones y eliminaciones de manera eficiente en cualquier ubicación de la secuencia. La secuencia se almacena como una lista de vínculo de elementos de forma bidireccional, cada uno de los cuales contiene un miembro de algún tipo Type
.
Sintaxis
template <class Type, class Allocator= allocator<Type>>
class list
Parámetros
Type
El tipo de datos de elementos que se almacenará en la lista.
Allocator
El tipo que representa el objeto asignador almacenado que encapsula los detalles sobre la asignación y la desasignación de memoria de la lista. Este argumento es opcional y el valor predeterminado es allocator<Type>
.
Comentarios
En general, la elección del tipo de contenedor se debe tomar según el tipo de búsqueda y de inserción que necesite la aplicación. Los vectores deben ser el contenedor preferido para administrar una secuencia cuando escasee el acceso aleatorio a algún elemento y solo sea necesario realizar inserciones o eliminaciones de elementos al final de una secuencia. El rendimiento del contenedor deque de la clase es superior cuando el acceso aleatorio es necesario y escasean las inserciones y eliminaciones al principio y al final de una secuencia.
Las funciones miembro de lista merge
, reverse
, unique
, remove
y remove_if
se han optimizado para funcionar en objetos de lista y ofrecer una alternativa de alto rendimiento a sus equivalentes genéricos.
La reasignación de lista se realiza cuando una función miembro debe insertar o borrar elementos de la lista. En todos esos casos, solo los iteradores o las referencias que apuntan a partes borradas de la secuencia controlada dejan de ser válidas.
Incluya el encabezado estándar <list>
de la Biblioteca estándar de C++ para definir la lista de plantilla de clase container
y varias plantillas auxiliares.
Miembros
Constructores
Nombre | Descripción |
---|---|
list |
Construye una lista de un tamaño específico, con elementos de un valor específico, con un allocator específico o como copia de alguna otra lista. |
Typedefs
Nombre | Descripción |
---|---|
allocator_type |
Tipo que representa la clase allocator para un objeto de lista. |
const_iterator |
Tipo que proporciona un iterador bidireccional que puede leer un elemento const de una lista. |
const_pointer |
Tipo que proporciona un puntero a un elemento const en una lista. |
const_reference |
Tipo que proporciona una referencia a un elemento const almacenado en una lista para leer y realizar operaciones const . |
const_reverse_iterator |
Tipo que proporciona un iterador bidireccional que puede leer cualquier elemento const de una lista. |
difference_type |
Tipo que proporciona la diferencia entre dos iteradores que hacen referencia a elementos de la misma lista. |
iterator |
Tipo que proporciona un iterador bidireccional que puede leer o modificar cualquier elemento de una lista. |
pointer |
Tipo que proporciona un puntero a un elemento de una lista. |
reference |
Tipo que proporciona una referencia a un elemento const almacenado en una lista para leer y realizar operaciones const . |
reverse_iterator |
Tipo que proporciona un iterador bidireccional que puede leer o modificar un elemento de una lista invertida. |
size_type |
Tipo que cuenta el número de elementos de una lista. |
value_type |
Tipo que representa el tipo de datos almacenados en una lista. |
Funciones
Nombre | Descripción |
---|---|
assign |
Borra elementos de una lista y copia un nuevo conjunto de elementos a la lista de destino. |
back |
Devuelve una referencia al último elemento de una lista. |
begin |
Devuelve un iterador que dirige al primer elemento de una lista. |
cbegin |
Devuelve un iterador constante que dirige al primer elemento de una lista. |
cend |
Devuelve un iterador constante que dirige a la ubicación siguiente al último elemento de una lista. |
clear |
Borra todos los elementos de una lista. |
crbegin |
Devuelve un iterador constante que dirige al primer elemento de una lista invertida. |
crend |
Devuelve un iterador constante que dirige a la ubicación siguiente al último elemento de una lista invertida. |
emplace |
Inserta en una posición especificada de una lista un elemento construido en contexto. |
emplace_back |
Agrega un elemento construido en contexto al final de una lista. |
emplace_front |
Agrega un elemento construido en contexto al principio de una lista. |
empty |
Comprueba si una lista está vacía. |
end |
Devuelve un iterador que dirige a la ubicación que sigue al último elemento de una lista. |
erase |
Quita un elemento o un intervalo de elementos de una lista de las posiciones especificadas. |
front |
Devuelve una referencia al primer elemento de una lista. |
get_allocator |
Devuelve una copia del objeto allocator utilizado para construir una lista. |
insert |
Inserta un elemento, varios elementos o un intervalo de elementos en una lista en una posición especificada. |
max_size |
Devuelve la longitud máxima de una lista. |
merge |
Quita los elementos de la lista de argumentos, los inserta en la lista de objetivo y ordena el nuevo conjunto combinado de elementos en orden ascendente o en otro orden especificado. |
pop_back |
Elimina el elemento situado al final de una lista. |
pop_front |
Elimina el elemento situado al principio de una lista. |
push_back |
Agrega un elemento al final de una lista. |
push_front |
Agrega un elemento al principio de una lista. |
rbegin |
Devuelve un iterador que dirige al primer elemento de una lista invertida. |
remove |
Borra los elementos de una lista que coinciden con un valor especificado. |
remove_if |
Borra elementos de la lista para la que se cumple un predicado especificado. |
rend |
Devuelve un iterador que dirige a la ubicación siguiente al último elemento de una lista invertida. |
resize |
Especifica un nuevo tamaño de una lista. |
reverse |
Invierte el orden en que aparecen los elementos en una lista. |
size |
Devuelve el número de elementos de una lista. |
sort |
Organiza los elementos de una lista en orden ascendente o con respecto a otra relación de ordenación. |
splice |
Quita los elementos de la lista de argumentos y los inserta en la lista de destino. |
swap |
Intercambia los elementos de dos listas. |
unique |
Quita de la lista los elementos duplicados adyacentes o los elementos adyacentes que cumplan algún otro predicado binario. |
Operadores
Nombre | Descripción |
---|---|
operator= |
Reemplaza los elementos de la lista por una copia de otra lista. |
Requisitos
Encabezado: <list>
allocator_type
Tipo que representa la clase de asignador para un objeto de lista.
typedef Allocator allocator_type;
Comentarios
allocator_type
es un sinónimo del parámetro de plantilla Allocator
.
Ejemplo
Vea el ejemplo de get_allocator
.
assign
Borra elementos de una lista y copia un nuevo conjunto de elementos a una lista de destino.
void assign(
size_type Count,
const Type& Val);
void assign
initializer_list<Type> IList);
template <class InputIterator>
void assign(
InputIterator First,
InputIterator Last);
Parámetros
First
Posición del primer elemento en el intervalo de elementos que se va a copiar de la lista de argumentos.
Last
Posición del primer elemento que se encuentra más allá del intervalo de elementos que se va a copiar de la lista de argumentos.
Count
Número de copias de un elemento que se va a insertar en la lista.
Val
Valor del elemento que se va a insertar en la lista.
IList
initializer_list que contiene los elementos que se van a insertar.
Comentarios
Después de borrar los elementos existentes en la lista de destino, assign inserta un intervalo especificado de elementos de la lista original o de otra lista en la lista de destino, o inserta copias de un nuevo elemento de un valor especificado en la lista de destino.
Ejemplo
// list_assign.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main()
{
using namespace std;
list<int> c1, c2;
list<int>::const_iterator cIter;
c1.push_back(10);
c1.push_back(20);
c1.push_back(30);
c2.push_back(40);
c2.push_back(50);
c2.push_back(60);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
c1.assign(++c2.begin(), c2.end());
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
c1.assign(7, 4);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
c1.assign({ 10, 20, 30, 40 });
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
}
c1 = 10 20 30c1 = 50 60c1 = 4 4 4 4 4 4 4c1 = 10 20 30 40
back
Devuelve una referencia al último elemento de una lista.
reference back();
const_reference back() const;
Valor devuelto
El último elemento de la lista. Si la lista está vacía, el valor devuelto es indefinido.
Comentarios
Si el valor devuelto de back
se asigna a un const_reference
, el objeto de lista no se puede modificar. Si el valor devuelto de back
se asigna a un reference
, el objeto de lista se puede modificar.
Al compilar con _ITERATOR_DEBUG_LEVEL
definido como 1 o 2, se producirá un error de runtime si intenta obtener acceso a un elemento de una lista vacía. Vea Iteradores comprobados para obtener más información.
Ejemplo
// list_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 11 );
int& i = c1.back( );
const int& ii = c1.front( );
cout << "The last integer of c1 is " << i << endl;
i--;
cout << "The next-to-last integer of c1 is " << ii << endl;
}
The last integer of c1 is 11
The next-to-last integer of c1 is 10
begin
Devuelve un iterador que dirige al primer elemento de una lista.
const_iterator begin() const;
iterator begin();
Valor devuelto
Iterador bidireccional que dirige al primer elemento de la lista o a la ubicación siguiente a una lista vacía.
Comentarios
Si el valor devuelto de begin
se asigna a const_iterator
, los elementos del objeto de lista no se pueden modificar. Si el valor devuelto de begin
se asigna a iterator
, los elementos del objeto de lista se pueden modificar.
Ejemplo
// list_begin.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
list <int>::const_iterator c1_cIter;
c1.push_back( 1 );
c1.push_back( 2 );
c1_Iter = c1.begin( );
cout << "The first element of c1 is " << *c1_Iter << endl;
*c1_Iter = 20;
c1_Iter = c1.begin( );
cout << "The first element of c1 is now " << *c1_Iter << endl;
// The following line would be an error because iterator is const
// *c1_cIter = 200;
}
The first element of c1 is 1
The first element of c1 is now 20
cbegin
Devuelve un iterador const
que direcciona el primer elemento del intervalo.
const_iterator cbegin() const;
Valor devuelto
Iterador const
de acceso bidireccional que apunta al primer elemento del intervalo o la ubicación situada más allá del final de un intervalo vacío (para un intervalo vacío, cbegin() == cend()
).
Comentarios
Con el valor devuelto de cbegin
, los elementos del intervalo no se pueden modificar.
Se puede usar esta función miembro en lugar de la función miembro begin()
para garantizar que el valor devuelto es const_iterator
. Normalmente, se usa junto con la palabra clave de deducción de tipos auto
, como se muestra en el ejemplo siguiente. En el ejemplo se considera que Container
es un contenedor modificable (distinto de const
) de cualquier naturaleza que admite begin()
y cbegin()
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Devuelve un iterador const
que direcciona la ubicación situada más allá del último elemento de un intervalo.
const_iterator cend() const;
Valor devuelto
Iterador const
de acceso bidireccional que apunta justo después del final del intervalo.
Comentarios
cend
se usa para probar si un iterador ha sobrepasado el final de su intervalo.
Se puede usar esta función miembro en lugar de la función miembro end()
para garantizar que el valor devuelto es const_iterator
. Normalmente, se usa junto con la palabra clave de deducción de tipos auto
, como se muestra en el ejemplo siguiente. En el ejemplo se considera que Container
es un contenedor modificable (distinto de const
) de cualquier naturaleza que admite end()
y cend()
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
El valor devuelto por cend
no se debe desreferenciar.
eliminar
Borra todos los elementos de una lista.
void clear();
Ejemplo
// list_clear.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main() {
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
cout << "The size of the list is initially " << c1.size( ) << endl;
c1.clear( );
cout << "The size of list after clearing is " << c1.size( ) << endl;
}
The size of the list is initially 3
The size of list after clearing is 0
const_iterator
Tipo que proporciona un iterador bidireccional que puede leer un elemento const
de una lista.
typedef implementation-defined const_iterator;
Comentarios
Un tipo const_iterator
no se puede utilizar para modificar el valor de un elemento.
Ejemplo
Vea el ejemplo de back
.
const_pointer
Proporciona un puntero a un elemento const
de una lista.
typedef typename Allocator::const_pointer const_pointer;
Comentarios
Un tipo const_pointer
no se puede utilizar para modificar el valor de un elemento.
En la mayoría de los casos, se debe usar iterator
para obtener acceso a los elementos de un objeto de lista.
const_reference
Tipo que proporciona una referencia a un elemento const
almacenado en una lista para leer y realizar operaciones const
.
typedef typename Allocator::const_reference const_reference;
Comentarios
Un tipo const_reference
no se puede utilizar para modificar el valor de un elemento.
Ejemplo
// list_const_ref.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
const list <int> c2 = c1;
const int &i = c2.front( );
const int &j = c2.back( );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
// The following line would cause an error because c2 is const
// c2.push_back( 30 );
}
The first element is 10
The second element is 20
const_reverse_iterator
Tipo que proporciona un iterador bidireccional que puede leer cualquier elemento const
de una lista.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Comentarios
Los tipos const_reverse_iterator
no pueden modificar el valor de un elemento. Se utilizan para procesar una iteración en la lista en orden inverso.
Ejemplo
Vea el ejemplo de rbegin
.
crbegin
Devuelve un iterador constante que dirige al primer elemento de una lista invertida.
const_reverse_iterator rbegin() const;
Valor devuelto
Iterador bidireccional inverso const que direcciona el primer elemento de una lista invertida (o que direcciona lo que fue el último elemento de la list
sin invertir).
Comentarios
crbegin
se usa con una lista invertida igual que list::begin
se usa con list
.
Con el valor devuelto de crbegin
, el objeto de lista no se puede modificar. list::rbegin
puede utilizarse para recorrer en iteración una lista hacia atrás.
Ejemplo
// list_crbegin.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::const_reverse_iterator c1_crIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_crIter = c1.crbegin( );
cout << "The last element in the list is " << *c1_crIter << "." << endl;
}
The last element in the list is 30.
crend
Devuelve un iterador constante que dirige a la ubicación siguiente al último elemento de una lista invertida.
const_reverse_iterator rend() const;
Valor devuelto
Un iterador constante bidireccional inverso que dirige a la ubicación siguiente al último elemento de un objeto list
invertido (la ubicación que había precedido al primer elemento de list
sin invertir).
Comentarios
crend
se usa con una lista invertida igual que list::end
se usa con list
.
Con el valor devuelto de crend
, el objeto list
no se puede modificar.
Se puede utilizar crend
para comprobar si un iterador inverso llegó al final de su list
.
El valor devuelto por crend
no se debe desreferenciar.
Ejemplo
// list_crend.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::const_reverse_iterator c1_crIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_crIter = c1.crend( );
c1_crIter --; // Decrementing a reverse iterator moves it forward in
// the list (to point to the first element here)
cout << "The first element in the list is: " << *c1_crIter << endl;
}
The first element in the list is: 10
difference_type
Tipo de entero con signo que se puede usar para representar el número de elementos de una lista en un intervalo entre elementos a los que apuntan los iteradores.
typedef typename Allocator::difference_type difference_type;
Comentarios
El difference_type
es el tipo devuelto al restar o incrementar los iteradores del contenedor. difference_type
se suele usar para representar el número de elementos que hay en el intervalo [ first
, last
) entre los iteradores first
y last
. Incluye el elemento al que apunta first
y el intervalo de elementos que abarca hasta el elemento al que apunta last
sin incluirlo.
Tenga en cuenta que, aunque difference_type
está disponible para todos los iteradores que cumplen los requisitos de un iterador de entrada, incluida la clase de iteradores bidireccionales admitida por los contenedores reversibles como set, solo los iteradores de acceso aleatorio proporcionados por un contenedor de acceso aleatorio, como la Clase vector
, admiten la resta entre iteradores.
Ejemplo
// list_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <list>
#include <algorithm>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 30 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.push_back( 10 );
c1.push_back( 30 );
c1.push_back( 20 );
c1_Iter = c1.begin( );
c2_Iter = c1.end( );
list <int>::difference_type df_typ1, df_typ2, df_typ3;
df_typ1 = count( c1_Iter, c2_Iter, 10 );
df_typ2 = count( c1_Iter, c2_Iter, 20 );
df_typ3 = count( c1_Iter, c2_Iter, 30 );
cout << "The number '10' is in c1 collection " << df_typ1 << " times.\n";
cout << "The number '20' is in c1 collection " << df_typ2 << " times.\n";
cout << "The number '30' is in c1 collection " << df_typ3 << " times.\n";
}
The number '10' is in c1 collection 1 times.
The number '20' is in c1 collection 2 times.
The number '30' is in c1 collection 3 times.
emplace
Inserta en una posición especificada de una lista un elemento construido en contexto.
void emplace(iterator Where, Type&& val);
Parámetros
Where
La posición de la clase list
de destino donde se inserta el primer elemento.
val
El elemento que se agrega al final de la list
.
Comentarios
Si se lanza una excepción, la list
se deja sin modificar y se vuelve a lanzar la excepción.
Ejemplo
// list_emplace.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <string> c2;
string str("a");
c2.emplace(c2.begin(), move( str ) );
cout << "Moved first element: " << c2.back( ) << endl;
}
Moved first element: a
emplace_back
Agrega un elemento construido en contexto al final de una lista.
void emplace_back(Type&& val);
Parámetros
val
El elemento que se agrega al final de la list
.
Comentarios
Si se lanza una excepción, la list
se deja sin modificar y se vuelve a lanzar la excepción.
Ejemplo
// list_emplace_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <string> c2;
string str("a");
c2.emplace_back( move( str ) );
cout << "Moved first element: " << c2.back( ) << endl;
}
Moved first element: a
emplace_front
Agrega un elemento construido en contexto al principio de una lista.
void emplace_front(Type&& val);
Parámetros
val
El elemento que se agrega al principio de list
.
Comentarios
Si se lanza una excepción, la list
se deja sin modificar y se vuelve a lanzar la excepción.
Ejemplo
// list_emplace_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <string> c2;
string str("a");
c2.emplace_front( move( str ) );
cout << "Moved first element: " << c2.front( ) << endl;
}
Moved first element: a
empty
Comprueba si una lista está vacía.
bool empty() const;
Valor devuelto
true
si la lista está vacía; false
si la lista no está vacía.
Ejemplo
// list_empty.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
if ( c1.empty( ) )
cout << "The list is empty." << endl;
else
cout << "The list is not empty." << endl;
}
The list is not empty.
end
Devuelve un iterador que dirige a la ubicación que sigue al último elemento de una lista.
const_iterator end() const;
iterator end();
Valor devuelto
Iterador bidireccional que dirige a la ubicación que sigue al último elemento de una lista. Si la lista está vacía, list::end == list::begin
.
Comentarios
end
se usa para comprobar si un iterador ha llegado al final de su lista.
Ejemplo
// list_end.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_Iter = c1.end( );
c1_Iter--;
cout << "The last integer of c1 is " << *c1_Iter << endl;
c1_Iter--;
*c1_Iter = 400;
cout << "The new next-to-last integer of c1 is "
<< *c1_Iter << endl;
// If a const iterator had been declared instead with the line:
// list <int>::const_iterator c1_Iter;
// an error would have resulted when inserting the 400
cout << "The list is now:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
}
The last integer of c1 is 30
The new next-to-last integer of c1 is 400
The list is now: 10 400 30
erase
Quita un elemento o un intervalo de elementos de una lista de las posiciones especificadas.
iterator erase(iterator Where);
iterator erase(iterator first, iterator last);
Parámetros
Where
Posición del elemento que se quitará de la lista.
first
Posición del primer elemento que se quitará de la lista.
last
Posición inmediatamente siguiente a la del último elemento que se quitará de la lista.
Valor devuelto
Iterador bidireccional que designa el primer elemento restante después de los elementos quitados o, si no hay ningún elemento después, un puntero al final de la lista.
Comentarios
No se produce ninguna reasignación, así que los iteradores y las referencias solo dejarán de ser válidos para los elementos borrados.
erase
nunca inicia una excepción.
Ejemplo
// list_erase.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.push_back( 40 );
c1.push_back( 50 );
cout << "The initial list is:";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
c1.erase( c1.begin( ) );
cout << "After erasing the first element, the list becomes:";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
Iter = c1.begin( );
Iter++;
c1.erase( Iter, c1.end( ) );
cout << "After erasing all elements but the first, the list becomes: ";
for (Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
}
The initial list is: 10 20 30 40 50
After erasing the first element, the list becomes: 20 30 40 50
After erasing all elements but the first, the list becomes: 20
front
Devuelve una referencia al primer elemento de una lista.
reference front();
const_reference front() const;
Valor devuelto
Si la lista está vacía, la devolución no está definida.
Comentarios
Si el valor devuelto de front
se asigna a un const_reference
, el objeto de lista no se puede modificar. Si el valor devuelto de front
se asigna a un reference
, el objeto de lista se puede modificar.
Al compilar con _ITERATOR_DEBUG_LEVEL
definido como 1 o 2, se producirá un error de runtime si intenta obtener acceso a un elemento de una lista vacía. Vea Iteradores comprobados para obtener más información.
Ejemplo
// list_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main() {
using namespace std;
list <int> c1;
c1.push_back( 10 );
int& i = c1.front();
const int& ii = c1.front();
cout << "The first integer of c1 is " << i << endl;
i++;
cout << "The first integer of c1 is " << ii << endl;
}
The first integer of c1 is 10
The first integer of c1 is 11
get_allocator
Devuelve una copia del objeto de asignador utilizado para construir una lista.
Allocator get_allocator() const;
Valor devuelto
El asignador utilizado por la lista.
Comentarios
Los asignadores de la clase de lista especifican cómo la clase administra el almacenamiento. Los asignadores predeterminados proporcionados con las clases contenedoras de la biblioteca estándar de C++ son suficientes para la mayoría de las necesidades de programación. La escritura y el uso de sus propias clases de asignador son temas avanzados de C++.
Ejemplo
// list_get_allocator.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// The following lines declare objects
// that use the default allocator.
list <int> c1;
list <int, allocator<int> > c2 = list <int, allocator<int> >( allocator<int>( ) );
// c3 will use the same allocator class as c1
list <int> c3( c1.get_allocator( ) );
list<int>::allocator_type xlst = c1.get_allocator( );
// You can now call functions on the allocator class used by c1
}
insert
Inserta un elemento, varios elementos o un intervalo de elementos en una lista en una posición especificada.
iterator insert(iterator Where, const Type& Val);
iterator insert(iterator Where, Type&& Val);
void insert(iterator Where, size_type Count, const Type& Val);
iterator insert(iterator Where, initializer_list<Type> IList);
template <class InputIterator>
void insert(iterator Where, InputIterator First, InputIterator Last);
Parámetros
Where
Posición de la lista de destino donde se inserta el primer elemento.
Val
Valor del elemento que se va a insertar en la lista.
Count
Número de elementos que se van a insertar en la lista.
First
Posición del primer elemento en el intervalo de elementos de la lista de argumentos que se va a copiar.
Last
Posición del primer elemento más allá del intervalo de elementos de la lista de argumentos que se va a copiar.
Valor devuelto
Las dos primeras funciones insert devuelven un iterador que apunta a la posición donde se insertó el nuevo elemento en la lista.
Ejemplo
// list_class_insert.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main()
{
using namespace std;
list <int> c1, c2;
list <int>::iterator Iter;
c1.push_back(10);
c1.push_back(20);
c1.push_back(30);
c2.push_back(40);
c2.push_back(50);
c2.push_back(60);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
Iter = c1.begin();
Iter++;
c1.insert(Iter, 100);
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
Iter = c1.begin();
Iter++;
Iter++;
c1.insert(Iter, 2, 200);
cout << "c1 =";
for(auto c : c1)
cout << " " << c;
cout << endl;
c1.insert(++c1.begin(), c2.begin(), --c2.end());
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
// initialize a list of strings by moving
list < string > c3;
string str("a");
c3.insert(c3.begin(), move(str));
cout << "Moved first element: " << c3.front() << endl;
// Assign with an initializer_list
list <int> c4{ {1, 2, 3, 4} };
c4.insert(c4.begin(), { 5, 6, 7, 8 });
cout << "c4 =";
for (auto c : c4)
cout << " " << c;
cout << endl;
}
iterator
Tipo que proporciona un iterador bidireccional que puede leer o modificar cualquier elemento de una lista.
typedef implementation-defined iterator;
Comentarios
Se puede usar un tipo iterator
para modificar el valor de un elemento.
Ejemplo
Vea el ejemplo de begin
.
list
Construye una lista de un tamaño específico o con elementos de un valor específico o con un asignador específico o como una copia de todo o de parte de alguna otra lista.
list();
explicit list(const Allocator& Al);
explicit list(size_type Count);
list(size_type Count, const Type& Val);
list(size_type Count, const Type& Val, const Allocator& Al);
list(const list& Right);
list(list&& Right);
list(initializer_list<Type> IList, const Allocator& Al);
template <class InputIterator>
list(InputIterator First, InputIterator Last);
template <class InputIterator>
list(InputIterator First, InputIterator Last, const Allocator& Al);
Parámetros
Al
La clase de asignador que se usa con este objeto.
Count
Número de elementos de la lista construida.
Val
Valor de los elementos de la lista.
Right
Lista de la que la lista construida va a ser una copia.
First
Posición del primer elemento en el intervalo de elementos que se va a copiar.
Last
Posición del primer elemento más allá del intervalo de elementos que se va a copiar.
IList
initializer_list que contiene los elementos que se van a copiar.
Comentarios
Todos los constructores almacenan un objeto de asignador (Al
) e inicializan la lista.
get_allocator
devuelve una copia del objeto de asignador usado para la construcción de una lista.
Los dos primeros constructores especifican una lista inicial vacía y el segundo especifica el tipo de asignador (Al
) que se va a usar.
El tercer constructor especifica una repetición de un número especificado (Count
) de elementos del valor predeterminado para la clase Type
.
Los constructores cuarto y quinto especifican una repetición de elementos (Count
) de valor Val
.
El sexto constructor especifica una copia de la lista Right
.
El séptimo constructor mueve la lista Right
.
El octavo constructor utiliza una initializer_list para especificar los elementos.
Los dos constructores siguientes copian el intervalo [First, Last)
de una lista.
Ninguno de los constructores realiza ninguna reasignación provisional.
Ejemplo
// list_class_list.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main()
{
using namespace std;
// Create an empty list c0
list <int> c0;
// Create a list c1 with 3 elements of default value 0
list <int> c1(3);
// Create a list c2 with 5 elements of value 2
list <int> c2(5, 2);
// Create a list c3 with 3 elements of value 1 and with the
// allocator of list c2
list <int> c3(3, 1, c2.get_allocator());
// Create a copy, list c4, of list c2
list <int> c4(c2);
// Create a list c5 by copying the range c4[ first, last)
list <int>::iterator c4_Iter = c4.begin();
c4_Iter++;
c4_Iter++;
list <int> c5(c4.begin(), c4_Iter);
// Create a list c6 by copying the range c4[ first, last) and with
// the allocator of list c2
c4_Iter = c4.begin();
c4_Iter++;
c4_Iter++;
c4_Iter++;
list <int> c6(c4.begin(), c4_Iter, c2.get_allocator());
cout << "c1 =";
for (auto c : c1)
cout << " " << c;
cout << endl;
cout << "c2 =";
for (auto c : c2)
cout << " " << c;
cout << endl;
cout << "c3 =";
for (auto c : c3)
cout << " " << c;
cout << endl;
cout << "c4 =";
for (auto c : c4)
cout << " " << c;
cout << endl;
cout << "c5 =";
for (auto c : c5)
cout << " " << c;
cout << endl;
cout << "c6 =";
for (auto c : c6)
cout << " " << c;
cout << endl;
// Move list c6 to list c7
list <int> c7(move(c6));
cout << "c7 =";
for (auto c : c7)
cout << " " << c;
cout << endl;
// Construct with initializer_list
list<int> c8({ 1, 2, 3, 4 });
cout << "c8 =";
for (auto c : c8)
cout << " " << c;
cout << endl;
}
c1 = 0 0 0c2 = 2 2 2 2 2c3 = 1 1 1c4 = 2 2 2 2 2c5 = 2 2c6 = 2 2 2c7 = 2 2 2c8 = 1 2 3 4
max_size
Devuelve la longitud máxima de una lista.
size_type max_size() const;
Valor devuelto
Longitud máxima posible de la lista.
Ejemplo
// list_max_size.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::size_type i;
i = c1.max_size( );
cout << "Maximum possible length of the list is " << i << "." << endl;
}
merge
Quita los elementos de la lista de argumentos, los inserta en la lista de objetivo y ordena el nuevo conjunto combinado de elementos en orden ascendente o en otro orden especificado.
void merge(list<Type, Allocator>& right);
template <class Traits>
void merge(list<Type, Allocator>& right, Traits comp);
Parámetros
right
La lista de argumentos que se combinará con la lista de objetivo.
comp
El operador de comparación que se utiliza para ordenar los elementos de la lista de objetivo.
Comentarios
La lista de argumentos right
se combina con la lista de objetivo.
Tanto los argumentos como las listas de objetivo se deben ordenar con la misma relación de comparación con la que se ordenará la secuencia resultante. El orden predeterminado de la primera función miembro es ascendente. La segunda función miembro impone la operación de comparación especificada por el usuario comp
de clase Traits
.
Ejemplo
// list_merge.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1, c2, c3;
list <int>::iterator c1_Iter, c2_Iter, c3_Iter;
c1.push_back( 3 );
c1.push_back( 6 );
c2.push_back( 2 );
c2.push_back( 4 );
c3.push_back( 5 );
c3.push_back( 1 );
cout << "c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
cout << "c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
c2.merge( c1 ); // Merge c1 into c2 in (default) ascending order
c2.sort( greater<int>( ) );
cout << "After merging c1 with c2 and sorting with >: c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
cout << "c3 =";
for ( c3_Iter = c3.begin( ); c3_Iter != c3.end( ); c3_Iter++ )
cout << " " << *c3_Iter;
cout << endl;
c2.merge( c3, greater<int>( ) );
cout << "After merging c3 with c2 according to the '>' comparison relation: c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
}
c1 = 3 6
c2 = 2 4
After merging c1 with c2 and sorting with >: c2 = 6 4 3 2
c3 = 5 1
After merging c3 with c2 according to the '>' comparison relation: c2 = 6 5 4 3 2 1
operator=
Reemplaza los elementos de la lista por una copia de otra lista.
list& operator=(const list& right);
list& operator=(list&& right);
Parámetros
right
La clase list
que se copia en list
.
Comentarios
Después de borrar todos los elementos existentes en una list
, el operador copia o mueve el contenido de right
a la list
.
Ejemplo
// list_operator_as.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int> v1, v2, v3;
list<int>::iterator iter;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(50);
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << *iter << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = forward< list<int> >(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
}
pointer
Proporciona un puntero a un elemento de una lista.
typedef typename Allocator::pointer pointer;
Comentarios
Se puede usar un tipo pointer
para modificar el valor de un elemento.
En la mayoría de los casos, se debe usar iterator
para obtener acceso a los elementos de un objeto de lista.
pop_back
Elimina el elemento situado al final de una lista.
void pop_back();
Comentarios
El último elemento no debe estar vacío. pop_back
nunca inicia una excepción.
Ejemplo
// list_pop_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 1 );
c1.push_back( 2 );
cout << "The first element is: " << c1.front( ) << endl;
cout << "The last element is: " << c1.back( ) << endl;
c1.pop_back( );
cout << "After deleting the element at the end of the list, "
"the last element is: " << c1.back( ) << endl;
}
The first element is: 1
The last element is: 2
After deleting the element at the end of the list, the last element is: 1
pop_front
Elimina el elemento situado al principio de una lista.
void pop_front();
Comentarios
El primer elemento no debe estar vacío. pop_front
nunca inicia una excepción.
Ejemplo
// list_pop_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 1 );
c1.push_back( 2 );
cout << "The first element is: " << c1.front( ) << endl;
cout << "The second element is: " << c1.back( ) << endl;
c1.pop_front( );
cout << "After deleting the element at the beginning of the list, "
"the first element is: " << c1.front( ) << endl;
}
The first element is: 1
The second element is: 2
After deleting the element at the beginning of the list, the first element is: 2
push_back
Agrega un elemento al final de una lista.
void push_back(const Type& val);
void push_back(Type&& val);
Parámetros
val
El elemento que se agrega al final de la lista.
Comentarios
Si se lanza una excepción, la lista se deja sin modificar y se vuelve a lanzar la excepción.
Ejemplo
// list_push_back.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 1 );
if ( c1.size( ) != 0 )
cout << "Last element: " << c1.back( ) << endl;
c1.push_back( 2 );
if ( c1.size( ) != 0 )
cout << "New last element: " << c1.back( ) << endl;
// move initialize a list of strings
list <string> c2;
string str("a");
c2.push_back( move( str ) );
cout << "Moved first element: " << c2.back( ) << endl;
}
Last element: 1
New last element: 2
Moved first element: a
push_front
Agrega un elemento al principio de una lista.
void push_front(const Type& val);
void push_front(Type&& val);
Parámetros
val
El elemento que se agrega al principio de la lista.
Comentarios
Si se lanza una excepción, la lista se deja sin modificar y se vuelve a lanzar la excepción.
Ejemplo
// list_push_front.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
list <int> c1;
c1.push_front( 1 );
if ( c1.size( ) != 0 )
cout << "First element: " << c1.front( ) << endl;
c1.push_front( 2 );
if ( c1.size( ) != 0 )
cout << "New first element: " << c1.front( ) << endl;
// move initialize a list of strings
list <string> c2;
string str("a");
c2.push_front( move( str ) );
cout << "Moved first element: " << c2.front( ) << endl;
}
First element: 1
New first element: 2
Moved first element: a
rbegin
Devuelve un iterador que direcciona el primer elemento de una lista invertida.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Valor devuelto
Iterador bidireccional inverso que direcciona el primer elemento de una lista invertida (o que direcciona lo que habría sido el último elemento de la lista sin invertir).
Comentarios
rbegin
se usa con una lista invertida igual que begin
se usa con una lista.
Si el valor devuelto de rbegin
se asigna a un const_reverse_iterator
, el objeto de lista no se puede modificar. Si el valor devuelto de rbegin
se asigna a un reverse_iterator
, el objeto de lista se puede modificar.
rbegin
puede utilizarse para recorrer en iteración una lista hacia atrás.
Ejemplo
// list_rbegin.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
list <int>::reverse_iterator c1_rIter;
// If the following line replaced the line above, *c1_rIter = 40;
// (below) would be an error
//list <int>::const_reverse_iterator c1_rIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_rIter = c1.rbegin( );
cout << "The last element in the list is " << *c1_rIter << "." << endl;
cout << "The list is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
// rbegin can be used to start an iteration through a list in
// reverse order
cout << "The reversed list is:";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << " " << *c1_rIter;
cout << endl;
c1_rIter = c1.rbegin( );
*c1_rIter = 40;
cout << "The last element in the list is now " << *c1_rIter << "." << endl;
}
The last element in the list is 30.
The list is: 10 20 30
The reversed list is: 30 20 10
The last element in the list is now 40.
reference
Tipo que proporciona una referencia a un elemento almacenado en una lista.
typedef typename Allocator::reference reference;
Ejemplo
// list_ref.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
int &i = c1.front( );
int &j = c1.back( );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
}
The first element is 10
The second element is 20
remove
Borra los elementos de una lista que coinciden con un valor especificado.
void remove(const Type& val);
Parámetros
val
Valor que, si lo contiene un elemento, hará que se quite ese elemento de la lista.
Comentarios
El orden de los elementos restantes no se ve afectado.
Ejemplo
// list_remove.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 5 );
c1.push_back( 100 );
c1.push_back( 5 );
c1.push_back( 200 );
c1.push_back( 5 );
c1.push_back( 300 );
cout << "The initial list is c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
list <int> c2 = c1;
c2.remove( 5 );
cout << "After removing elements with value 5, the list becomes c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
}
The initial list is c1 = 5 100 5 200 5 300
After removing elements with value 5, the list becomes c2 = 100 200 300
remove_if
Borra elementos de una lista para la que se cumple el predicado especificado.
template <class Predicate>
void remove_if(Predicate pred)
Parámetros
pred
Predicado unario que, si lo satisface un elemento, da lugar a la eliminación de ese elemento de la lista.
Ejemplo
// list_remove_if.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
template <class T> class is_odd : public std::unary_function<T, bool>
{
public:
bool operator( ) ( T& val )
{
return ( val % 2 ) == 1;
}
};
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 3 );
c1.push_back( 4 );
c1.push_back( 5 );
c1.push_back( 6 );
c1.push_back( 7 );
c1.push_back( 8 );
cout << "The initial list is c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
list <int> c2 = c1;
c2.remove_if( is_odd<int>( ) );
cout << "After removing the odd elements, "
<< "the list becomes c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
}
The initial list is c1 = 3 4 5 6 7 8
After removing the odd elements, the list becomes c2 = 4 6 8
rend
Devuelve un iterador que direcciona la ubicación que sigue al último elemento de una lista invertida.
const_reverse_iterator rend() const;
reverse_iterator rend();
Valor devuelto
Iterador bidireccional inverso que direcciona la ubicación del último elemento de una lista invertida (la ubicación que había precedido al primer elemento de la lista sin invertir).
Comentarios
rend
se usa con una lista invertida igual que end
se usa con una lista.
Si el valor devuelto de rend
se asigna a un const_reverse_iterator
, el objeto de lista no se puede modificar. Si el valor devuelto de rend
se asigna a un reverse_iterator
, el objeto de lista se puede modificar.
Se puede utilizar rend
para comprobar a si un iterador inverso ha llegado al final de su lista.
El valor devuelto por rend
no se debe desreferenciar.
Ejemplo
// list_rend.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
list <int>::reverse_iterator c1_rIter;
// If the following line had replaced the line above, an error would
// have resulted in the line modifying an element (commented below)
// because the iterator would have been const
// list <int>::const_reverse_iterator c1_rIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_rIter = c1.rend( );
c1_rIter --; // Decrementing a reverse iterator moves it forward in
// the list (to point to the first element here)
cout << "The first element in the list is: " << *c1_rIter << endl;
cout << "The list is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
// rend can be used to test if an iteration is through all of the
// elements of a reversed list
cout << "The reversed list is:";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << " " << *c1_rIter;
cout << endl;
c1_rIter = c1.rend( );
c1_rIter--; // Decrementing the reverse iterator moves it backward
// in the reversed list (to the last element here)
*c1_rIter = 40; // This modification of the last element would have
// caused an error if a const_reverse iterator had
// been declared (as noted above)
cout << "The modified reversed list is:";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << " " << *c1_rIter;
cout << endl;
}
The first element in the list is: 10
The list is: 10 20 30
The reversed list is: 30 20 10
The modified reversed list is: 30 20 40
resize
Especifica un nuevo tamaño de una lista.
void resize(size_type _Newsize);
void resize(size_type _Newsize, Type val);
Parámetros
_Newsize
Nuevo tamaño de la lista.
val
Valor de los nuevos elementos que se agregarán a la lista si el nuevo tamaño es mayor que el tamaño original. Si el valor se omite, a los nuevos elementos se les asigna el valor predeterminado para la clase.
Comentarios
Si el tamaño de la lista es menor que el tamaño solicitado, _Newsize
, se agregan elementos a la lista hasta que esta alcanza el tamaño solicitado.
Si el tamaño de la lista es mayor que el tamaño solicitado, se eliminan los elementos más cercanos al final de la lista hasta que esta alcanza el tamaño _Newsize
.
Si el tamaño actual de la lista es igual que el tamaño solicitado, no se lleva a cabo ninguna acción.
size
refleja el tamaño actual de la lista.
Ejemplo
// list_resize.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.resize( 4,40 );
cout << "The size of c1 is " << c1.size( ) << endl;
cout << "The value of the last element is " << c1.back( ) << endl;
c1.resize( 5 );
cout << "The size of c1 is now " << c1.size( ) << endl;
cout << "The value of the last element is now " << c1.back( ) << endl;
c1.resize( 2 );
cout << "The reduced size of c1 is: " << c1.size( ) << endl;
cout << "The value of the last element is now " << c1.back( ) << endl;
}
The size of c1 is 4
The value of the last element is 40
The size of c1 is now 5
The value of the last element is now 0
The reduced size of c1 is: 2
The value of the last element is now 20
reverse
Invierte el orden en que aparecen los elementos en una lista.
void reverse();
Ejemplo
// list_reverse.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
cout << "c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.reverse( );
cout << "Reversed c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
c1 = 10 20 30
Reversed c1 = 30 20 10
reverse_iterator
Tipo que proporciona un iterador bidireccional que puede leer o modificar un elemento de una lista invertida.
typedef std::reverse_iterator<iterator> reverse_iterator;
Comentarios
Los tipos reverse_iterator
se utilizan para procesar una iteración en la lista en orden inverso.
Ejemplo
Vea el ejemplo de rbegin
.
size
Devuelve el número de elementos de una lista.
size_type size() const;
Valor devuelto
Longitud actual de la lista.
Ejemplo
// list_size.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::size_type i;
c1.push_back( 5 );
i = c1.size( );
cout << "List length is " << i << "." << endl;
c1.push_back( 7 );
i = c1.size( );
cout << "List length is now " << i << "." << endl;
}
List length is 1.
List length is now 2.
size_type
Tipo que cuenta el número de elementos de una lista.
typedef typename Allocator::size_type size_type;
Ejemplo
Vea el ejemplo de size
.
sort
Organiza los elementos de una lista en orden ascendente o con respecto a otro orden especificado por el usuario.
void sort();
template <class Traits>
void sort(Traits comp);
Parámetros
comp
Operador de comparación utilizado para ordenar elementos sucesivos.
Comentarios
La primera función miembro pone los elementos en orden ascendente de forma predeterminada.
La función de plantilla miembro ordena los elementos según la operación de comparación comp
de clase Traits
definida por el usuario.
Ejemplo
// list_sort.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 20 );
c1.push_back( 10 );
c1.push_back( 30 );
cout << "Before sorting: c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.sort( );
cout << "After sorting c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.sort( greater<int>( ) );
cout << "After sorting with 'greater than' operation, c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
Before sorting: c1 = 20 10 30
After sorting c1 = 10 20 30
After sorting with 'greater than' operation, c1 = 30 20 10
splice
Quita elementos de una lista de origen y los inserta en una lista de destino.
// insert the entire source list
void splice(const_iterator Where, list<Type, Allocator>& Source);
void splice(const_iterator Where, list<Type, Allocator>&& Source);
// insert one element of the source list
void splice(const_iterator Where, list<Type, Allocator>& Source, const_iterator Iter);
void splice(const_iterator Where, list<Type, Allocator>&& Source, const_iterator Iter);
// insert a range of elements from the source list
void splice(const_iterator Where, list<Type, Allocator>& Source, const_iterator First, const_iterator Last);
void splice(const_iterator Where, list<Type, Allocator>&& Source, const_iterator First, const_iterator Last);
Parámetros
Where
Posición en la lista de destino anterior a la posición de inserción.
Source
Lista de origen que se va a insertar en la lista de destino.
Iter
Elemento que se va a insertar de la lista de origen.
First
Primer elemento del intervalo que se va a insertar de la lista de origen.
Last
Primera posición después del último elemento del intervalo que se va a insertar de la lista de origen.
Comentarios
El primer par de funciones miembro inserta todos los elementos de la lista de origen en la lista de destino, en una posición anterior a la posición denominada Where
y quita todos los elementos de la lista de origen. (&Source
no debe ser igual que this
).
El segundo par de funciones miembro inserta el elemento Iter
en una posición anterior a la posición en la lista de destino denominada Where
y quita Iter de la lista de origen. (Si Where == Iter || Where == ++Iter
, no ocurre ningún cambio.)
El tercer par de funciones miembro inserta el intervalo designado mediante [ First
, Last
] antes del elemento en la lista de destino denominado Where
y quita dicho intervalo de elementos de la lista de origen. (Si &Source == this
, el intervalo [First, Last)
no debe incluir el elemento señalado por Where
.)
Si la unión del intervalo inserta elementos N
y &Source != this
, un objeto de clase iterator
se incrementa N
veces.
En todos los casos, los iteradores, punteros o referencias que remitan a elementos insertos seguirán siendo válidos y se transferirán al contenedor de destino.
Ejemplo
// list_splice.cpp
// compile with: /EHsc /W4
#include <list>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
list<int> c1{10,11};
list<int> c2{20,21,22};
list<int> c3{30,31};
list<int> c4{40,41,42,43};
list<int>::iterator where_iter;
list<int>::iterator first_iter;
list<int>::iterator last_iter;
cout << "Beginning state of lists:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
cout << "c3 = ";
print(c3);
cout << "c4 = ";
print(c4);
where_iter = c2.begin();
++where_iter; // start at second element
c2.splice(where_iter, c1);
cout << "After splicing c1 into c2:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
first_iter = c3.begin();
c2.splice(where_iter, c3, first_iter);
cout << "After splicing the first element of c3 into c2:" << endl;
cout << "c3 = ";
print(c3);
cout << "c2 = ";
print(c2);
first_iter = c4.begin();
last_iter = c4.end();
// set up to get the middle elements
++first_iter;
--last_iter;
c2.splice(where_iter, c4, first_iter, last_iter);
cout << "After splicing a range of c4 into c2:" << endl;
cout << "c4 = ";
print(c4);
cout << "c2 = ";
print(c2);
}
Beginning state of lists:c1 = 2 elements: (10) (11)c2 = 3 elements: (20) (21) (22)c3 = 2 elements: (30) (31)c4 = 4 elements: (40) (41) (42) (43)After splicing c1 into c2:c1 = 0 elements:c2 = 5 elements: (20) (10) (11) (21) (22)After splicing the first element of c3 into c2:c3 = 1 elements: (31)c2 = 6 elements: (20) (10) (11) (30) (21) (22)After splicing a range of c4 into c2:c4 = 2 elements: (40) (43)c2 = 8 elements: (20) (10) (11) (30) (41) (42) (21) (22)
swap
Intercambia los elementos de dos listas.
void swap(list<Type, Allocator>& right);
friend void swap(list<Type, Allocator>& left, list<Type, Allocator>& right)
Parámetros
right
Lista que proporciona los elementos que se van a intercambiar o lista cuyos elementos se van a intercambiar con los de la lista left
.
left
Lista cuyos elementos se van a intercambiar con los de la lista right
.
Ejemplo
// list_swap.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1, c2, c3;
list <int>::iterator c1_Iter;
c1.push_back( 1 );
c1.push_back( 2 );
c1.push_back( 3 );
c2.push_back( 10 );
c2.push_back( 20 );
c3.push_back( 100 );
cout << "The original list c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.swap( c2 );
cout << "After swapping with c2, list c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
swap( c1,c3 );
cout << "After swapping with c3, list c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
The original list c1 is: 1 2 3
After swapping with c2, list c1 is: 10 20
After swapping with c3, list c1 is: 100
unique
Quita de una lista los elementos duplicados adyacentes o los elementos adyacentes que cumplan algún otro predicado binario.
void unique();
template <class BinaryPredicate>
void unique(BinaryPredicate pred);
Parámetros
pred
El predicado binario que se usa para comparar los elementos sucesivos.
Comentarios
Esta función presupone que la lista está ordenada, por lo que todos los elementos duplicados son adyacentes. No se eliminarán los duplicados que no sean adyacentes.
La primera función miembro quita todos los elementos que compara con relación de igualdad con el elemento anterior.
La segunda función miembro quita todos los elementos que cumplen la función de predicado pred
al compararlos con el elemento anterior. Puede usar los objetos de función binarios declarados en el encabezado <functional>
para el argumento pred
o crear sus propios objetos.
Ejemplo
// list_unique.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter, c2_Iter,c3_Iter;
not_equal_to<int> mypred;
c1.push_back( -10 );
c1.push_back( 10 );
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 20 );
c1.push_back( -10 );
cout << "The initial list is c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
list <int> c2 = c1;
c2.unique( );
cout << "After removing successive duplicate elements, c2 =";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << " " << *c2_Iter;
cout << endl;
list <int> c3 = c2;
c3.unique( mypred );
cout << "After removing successive unequal elements, c3 =";
for ( c3_Iter = c3.begin( ); c3_Iter != c3.end( ); c3_Iter++ )
cout << " " << *c3_Iter;
cout << endl;
}
The initial list is c1 = -10 10 10 20 20 -10
After removing successive duplicate elements, c2 = -10 10 20 -10
After removing successive unequal elements, c3 = -10 -10
value_type
Tipo que representa el tipo de datos almacenados en una lista.
typedef typename Allocator::value_type value_type;
Comentarios
value_type
es un sinónimo del parámetro de plantilla Type
.
Ejemplo
// list_value_type.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list<int>::value_type AnInt;
AnInt = 44;
cout << AnInt << endl;
}
44