forward_list (Clase)
Describe un objeto que controla una secuencia de elementos de longitud variable. La secuencia se almacena como una lista de nodos vinculada individualmente, cada uno de los cuales contiene un miembro de tipo Type
.
Sintaxis
template <class Type,
class Allocator = allocator<Type>>
class forward_list
Parámetros
Type*
Tipo de datos de elemento que se almacenará en forward_list.
Asignador
Objeto de asignador almacenado que encapsula detalles sobre la asignación y desasignación de memoria de forward_list. Este parámetro es opcional. El valor predeterminado es allocator<Type
>.
Comentarios
Un objeto forward_list
asigna y libera almacenamiento para la secuencia que controla mediante un objeto almacenado de clase Asignador que se basa en la clase Asignador (conocida normalmente como std::allocator)
). Para obtener más información, vea Asignadores. Un objeto de asignador debe tener la misma interfaz externa que un objeto de tipo allocator
.
Nota:
El objeto de asignador almacenado no se copia cuando se asigna el objeto contenedor.
Los iteradores, punteros y referencias pueden llegar a no ser válidos cuando los elementos de su secuencia controlada se borran mediante forward_list
. Las inserciones y uniones realizados en la secuencia controlada mediante forward_list
no invalidan los iteradores.
Las adiciones a la secuencia controlada pueden realizarse mediante llamadas a forward_list::insert_after, que es la única función miembro que llama al constructor Type(const T&)
. forward_list
también puede llamar a constructores de movimiento. Si una expresión de ese tipo produce una excepción, el objeto contenedor no inserta ningún elemento nuevo y vuelve a producir la excepción. Así, un objeto de tipo forward_list
se queda en un estado conocido cuando se producen esas excepciones.
Miembros
Constructores
Nombre | Descripción |
---|---|
forward_list | Construye un objeto de tipo forward_list . |
Typedefs
Nombre | Descripción |
---|---|
allocator_type | Tipo que representa la clase de asignador de un objeto de lista de reenvíos. |
const_iterator | Tipo que proporciona un iterador constante para la lista de reenvíos. |
const_pointer | Tipo que proporciona un puntero a un elemento const de una lista de reenvíos. |
const_reference | Tipo que proporciona una referencia constante a un elemento de la lista de reenvíos. |
difference_type | Tipo entero con signo que se puede usar para representar el número de elementos de una lista de reenvíos en un intervalo entre elementos a los que apuntan los iteradores. |
iterator | Tipo que proporciona un iterador para la lista de reenvíos. |
pointer | Tipo que proporciona un puntero a un elemento de la lista de reenvíos. |
referencia | Tipo que proporciona una referencia a un elemento de la lista de reenvíos. |
size_type | Tipo que representa la distancia sin signo entre dos elementos. |
value_type | Tipo que representa el tipo de elemento almacenado en una lista de reenvíos. |
Funciones
Nombre | Descripción |
---|---|
assign | Borra elementos de una lista de reenvíos y copia un nuevo conjunto de elementos a una lista de reenvíos de destino. |
before_begin | Devuelve un iterador que direcciona la posición anterior al primer elemento de una lista de reenvíos. |
begin | Devuelve un iterador que direcciona el primer elemento de una lista de reenvíos. |
cbefore_begin | Devuelve un iterador const que direcciona la posición anterior al primer elemento de una lista de reenvíos. |
cbegin | Devuelve un iterador const que direcciona el primer elemento de una lista de reenvíos. |
cend | Devuelve un iterador constante que direcciona la ubicación que sigue al último elemento de una lista de reenvíos. |
eliminar | Borra todos los elementos de una lista de reenvíos. |
emplace_after | Construye con movimiento un nuevo elemento después de una posición especificada. |
emplace_front | Agrega un elemento construido al principio de la lista. |
empty | Comprueba si una lista de reenvíos está vacía. |
end | Devuelve un iterador que direcciona la ubicación que sigue al último elemento de una lista de reenvíos. |
erase_after | Quita de la lista de reenvíos los elementos situados después de una posición especificada. |
front | Devuelve una referencia al primer elemento de una lista de reenvíos. |
get_allocator | Devuelve una copia del objeto de asignador utilizado para construir una lista de reenvíos. |
insert_after | Agrega elementos a la lista de reenvíos después de una posición especificada. |
max_size | Devuelve la longitud máxima de una lista de reenvíos. |
merge | Quita los elementos de la lista de argumentos, los inserta en la lista de reenvíos de destino y ordena el nuevo conjunto combinado de elementos en orden ascendente o en otro orden especificado. |
pop_front | Elimina el elemento situado al principio de una lista de reenvíos. |
push_front | Agrega un elemento al principio de una lista de reenvíos. |
remove | Borra elementos de una lista de reenvíos que coincide con un valor especificado. |
remove_if | Borra elementos de una lista de reenvíos para la que se cumple el predicado especificado. |
resize | Especifica un nuevo tamaño de una lista de reenvíos. |
reverse | Invierte el orden en que aparecen los elementos en una lista de reenvíos. |
sort | Organiza los elementos en orden ascendente o con un orden especificado por un predicado. |
splice_after | Vuelve a unir vínculos entre nodos. |
swap | Intercambia los elementos de dos listas de reenvío. |
unique | Quita los elementos adyacentes que superan una prueba especificada. |
Operadores
Nombre | Descripción |
---|---|
operator= | Reemplaza los elementos de la lista de reenvíos con una copia de otra lista de reenvíos. |
allocator_type
Tipo que representa la clase de asignador de un objeto de lista de reenvíos.
typedef Allocator allocator_type;
Comentarios
allocator_type
es un sinónimo del parámetro de plantilla Allocator.
asignar
Borra elementos de una lista de reenvíos y copia un nuevo conjunto de elementos a una lista de reenvíos 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
Principio del intervalo de reemplazo.
last
Final del intervalo de reemplazo.
count
Número de elementos que se van a asignar.
val
Valor que se va a asignar a cada elemento.
Tipo
Tipo del valor.
IList
initializer_list que se va a copiar.
Comentarios
Si forward_list es un tipo entero, la primera función miembro tiene el mismo comportamiento que assign((size_type)First, (Type)Last)
. De lo contrario, la primera función miembro reemplaza la secuencia controlada por *this
con la secuencia [ First, Last)
, que no debe superponerse a la secuencia controlada inicial.
La segunda función miembro reemplaza la secuencia controlada por *this
con una repetición de Count
elementos de valor Val
.
La tercera función miembro copia los elementos de initializer_list a forward_list.
before_begin
Devuelve un iterador que direcciona la posición anterior al primer elemento de una lista de reenvíos.
const_iterator before_begin() const;
iterator before_begin();
Valor devuelto
Un iterador hacia delante que apunta inmediatamente antes del primer elemento de la secuencia (o inmediatamente antes del final de una secuencia vacía).
Comentarios
begin
Devuelve un iterador que direcciona el primer elemento de una lista de reenvíos.
const_iterator begin() const;
iterator begin();
Valor devuelto
Un iterador hacia delante que apunta al primer elemento de la secuencia (o más allá del final de una secuencia vacía).
Comentarios
cbefore_begin
Devuelve un iterador const que direcciona la posición anterior al primer elemento de una lista de reenvíos.
const_iterator cbefore_begin() const;
Valor devuelto
Un iterador hacia delante que apunta inmediatamente antes del primer elemento de la secuencia (o inmediatamente antes del final de una secuencia vacía).
Comentarios
cbegin
Devuelve un iterador const
que direcciona el primer elemento del intervalo.
const_iterator cbegin() const;
Valor devuelto
Iterador const
de acceso hacia delante 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 de acceso hacia delante 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 de reenvíos.
void clear();
Comentarios
Esta función miembro llama a erase_after(before_begin(), end())
.
const_iterator
Tipo que proporciona un iterador constante para la lista de reenvíos.
typedef implementation-defined const_iterator;
Comentarios
const_iterator
describe un objeto que puede actuar como un iterador de avance constante de la secuencia controlada. Aquí se describe como sinónimo de un tipo definido por implementación.
const_pointer
Tipo que proporciona un puntero a un elemento const
de una lista de reenvíos.
typedef typename Allocator::const_pointer
const_pointer;
Comentarios
const_reference
Tipo que proporciona una referencia constante a un elemento de la lista de reenvíos.
typedef typename Allocator::const_reference const_reference;
Comentarios
difference_type
Tipo entero con signo que se puede usar para representar el número de elementos de una lista de reenvíos en un intervalo entre elementos a los que apuntan los iteradores.
typedef typename Allocator::difference_type difference_type;
Comentarios
difference_type
describe un objeto que puede representar la diferencia entre las direcciones de dos elementos cualesquiera de la secuencia controlada.
emplace_after
Construye con movimiento un nuevo elemento después de una posición especificada.
template <class T>
iterator emplace_after(const_iterator Where, Type&& val);
Parámetros
Where
Posición de la lista de reenvíos de destino donde se crea el nuevo elemento.
val
El argumento del constructor.
Valor devuelto
Iterador que designa al elemento recién insertado.
Comentarios
Esta función miembro inserta un elemento con los argumentos de constructor val inmediatamente después del elemento al que apunta Where en la secuencia controlada. De lo contrario, su comportamiento es el mismo que forward_list::insert_after.
emplace_front
Agrega un elemento construido al principio de la lista.
template <class Type>
void emplace_front(Type&& val);
Parámetros
val
El elemento que se agrega al principio de la lista de reenvíos.
Comentarios
Esta función miembro inserta un elemento con los argumentos de constructor _ val
al final de la secuencia controlada.
Si se inicia una excepción, el contenedor se deja sin modificar y se vuelve a iniciar la excepción.
empty
Comprueba si una lista de reenvíos está vacía.
bool empty() const;
Valor devuelto
true
si la lista de reenvíos está vacía; de lo contrario, false
.
end
Devuelve un iterador que direcciona la ubicación que sigue al último elemento de una lista de reenvíos.
const_iterator end() const;
iterator end();
Valor devuelto
Un iterador hacia delante que apunta inmediatamente después del final de la secuencia.
erase_after
Quita de la lista de reenvíos los elementos situados después de una posición especificada.
iterator erase_after(const_iterator Where);
iterator erase_after(const_iterator first, const_iterator last);
Parámetros
Where
Posición de la lista de reenvíos de destino donde se borra el elemento.
first
Comienzo del intervalo que se va a borrar.
last
Final del intervalo que se va a borrar.
Valor devuelto
Un iterador que designa el primer elemento que permanece más allá de los elementos quitados, o forward_list::end si no existe ese elemento.
Comentarios
La primera función miembro quita el elemento de la secuencia controlada inmediatamente después de Where.
La segunda función miembro quita los elementos de la secuencia controlada en el intervalo ( first, last)
(no se incluye ningún extremo).
Al borrar N
elementos, se producen N
llamadas de destructor. Se produce una reasignación, de modo que los iteradores y las referencias dejan de ser válidos para los elementos borrados.
Las funciones miembro nunca producen una excepción.
forward_list
Construye un objeto de tipo forward_list
.
forward_list();
explicit forward_list(const Allocator& Al);
explicit forward_list(size_type Count);
forward_list(size_type Count, const Type& Val);
forward_list(size_type Count, const Type& Val, const Allocator& Al);
forward_list(const forward_list& Right);
forward_list(const forward_list& Right, const Allocator& Al);
forward_list(forward_list&& Right);
forward_list(forward_list&& Right, const Allocator& Al);
forward_list(initializer_list<Type> IList, const Alloc& Al);
template <class InputIterator>
forward_list(InputIterator First, InputIterator Last);
template <class InputIterator>
forward_list(InputIterator First, InputIterator Last, const Allocator& Al);
Parámetros
Al
La clase de asignador que se usa con este objeto.
Recuento
Número de elementos de la lista construida.
Val
Valor de los elementos de la lista construida.
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.
Último
Posición del primer elemento más allá del intervalo de elementos que se va a copiar.
IList
initializer_list que se va a copiar.
Comentarios
Todos los constructores almacenan un asignador e inicializan la secuencia controlada. El objeto de asignador es el argumento Al, si existe. Para el constructor de copias, es right.get_allocator()
. De lo contrario, es Allocator()
.
Los dos primeros constructores especifican una secuencia controlada inicial vacía.
El tercer constructor especifica una repetición de elementos Count de valor Type()
.
Los constructores cuarto y quinto especifican una repetición de elementos Count de valor Val.
El sexto constructor especifica una copia de la secuencia controlada por Right. Si InputIterator
es un tipo entero, los dos constructores siguientes especifican una repetición de elementos (size_type)First
de valor (Type)Last
. De lo contrario, los dos constructores siguientes especifican la secuencia [First, Last)
.
Los constructores noveno y décimo son iguales que el sexto, pero con una referencia rvalue.
El último constructor especifica la secuencia controlada inicial con un objeto de clase initializer_list<Type>
.
front
Devuelve una referencia al primer elemento de una lista de reenvíos.
reference front();
const_reference front() const;
Valor devuelto
Una referencia al primer elemento de la secuencia controlada, que no debe estar vacío.
get_allocator
Devuelve una copia del objeto de asignador utilizado para construir una lista de reenvíos.
allocator_type get_allocator() const;
Valor devuelto
El objeto de asignador almacenado.
insert_after
Agrega elementos a la lista de reenvíos después de una posición especificada.
iterator insert_after(const_iterator Where, const Type& Val);
void insert_after(const_iterator Where, size_type Count, const Type& Val);
void insert_after(const iterator Where, initializer_list<Type> IList);
iterator insert_after(const_iterator Where, Type&& Val);
template <class InputIterator>
void insert_after(const_iterator Where, InputIterator First, InputIterator Last);
Parámetros
Where
Posición de la lista de reenvíos de destino donde se inserta el primer elemento.
Recuento
Número de elementos que se van a insertar.
First
Principio del intervalo de inserción.
Último
Final del intervalo de inserción.
Val
Elemento agregado a la lista de reenvíos.
IList
initializer_list que se va a insertar.
Valor devuelto
Iterador que designa el elemento recién insertado (primera y última funciones miembro solamente).
Comentarios
Cada una de las funciones miembro inserta, justo después del elemento al que apunta Where en la secuencia controlada, una secuencia especificada por los operandos restantes.
La primera función miembro inserta un elemento que tiene el valor Val y devuelve un iterador que designa el elemento recién insertado.
La segunda función miembro inserta una repetición de Count elementos de valor Val.
Si InputIterator
es un tipo entero, la tercera función miembro se comporta igual que insert(it, (size_type)First, (Type)Last)
. De lo contrario, inserta la secuencia [First, Last)
, que no se debe superponer a la secuencia controlada inicial.
La cuarta función miembro inserta la secuencia especificada por un objeto de clase initializer_list<Type>
.
La última función miembro es igual que la primera, pero con una referencia rvalue.
La inserción de N
elementos produce N
llamadas de constructor. Se realiza una reasignación, pero los iteradores o las referencias no dejan de ser válidos.
Si se produce una excepción durante la inserción de uno o más elementos, el contenedor permanece inalterado y se vuelve a producir la excepción.
iterator
Tipo que proporciona un iterador para la lista de reenvíos.
typedef implementation-defined iterator;
Comentarios
iterator
describe un objeto que puede actuar como un iterador de avance de la secuencia controlada. Aquí se describe como sinónimo de un tipo definido por implementación.
max_size
Devuelve la longitud máxima de una lista de reenvíos.
size_type max_size() const;
Valor devuelto
La longitud de la secuencia más larga que puede controlar el objeto.
Comentarios
merge
Combina dos secuencias ordenadas en una única secuencia ordenada en tiempo lineal. Quita los elementos de la lista de argumentos y los inserta en esta forward_list
. Las dos listas deben ordenarse por el mismo objeto de función de comparación antes de llamar a merge
. La lista combinada se ordenará por ese objeto de función de comparación.
void merge(forward_list& right);
template <class Predicate>
void merge(forward_list& right, Predicate comp);
Parámetros
right
La lista de reenvíos desde la que se combinará.
comp
El objeto de función de comparación que se usa para ordenar elementos.
Comentarios
forward_list::merge
quita los elementos de forward_list
right
y los inserta en este forward_list
. Ambas secuencias deben estar ordenadas por el mismo predicado, que se describe a continuación. La secuencia combinada también está ordenada por ese objeto de función de comparación.
Para los iteradores Pi
y Pj
que designan elementos en posiciones i
y j
, la primera función miembro impone el orden !(*Pj < *Pi)
siempre que i < j
. (Los elementos se ordenan en ordenascending
). La segunda función miembro impone el orden ! comp(*Pj, *Pi)
siempre que i < j
.
Ningún par de elementos de la secuencia controlada original se invierte en la secuencia controlada resultante. Si un par de elementos de la secuencia controlada resultante equivale a (!(*Pi < *Pj) && !(*Pj < *Pi)
), un elemento de la secuencia controlada original aparece antes de un elemento de la secuencia controlada por right
.
Se produce una excepción solo si comp
inicia una excepción. En ese caso, la secuencia controlada se deja en un orden no especificado y se vuelve a iniciar la excepción.
operator=
Reemplaza los elementos de la lista de reenvíos con una copia de otra lista de reenvíos.
forward_list& operator=(const forward_list& right);
forward_list& operator=(initializer_list<Type> IList);
forward_list& operator=(forward_list&& right);
Parámetros
right
La lista de reenvíos que se copia en la lista de reenvíos.
IList
Una lista de inicializador entre llaves, que se comporta como una secuencia de elementos de tipo Type
.
Comentarios
El primer operador miembro reemplaza la secuencia controlada por una copia de la secuencia controlada mediante Right.
El segundo operador miembro reemplaza la secuencia controlada a partir de un objeto de clase initializer_list<Type>
.
El tercer operador miembro es igual que el primero, pero con una referencia rvalue.
pointer
Tipo que proporciona un puntero a un elemento de la lista de reenvíos.
typedef typename Allocator::pointer pointer;
pop_front
Elimina el elemento situado al principio de una lista de reenvíos.
void pop_front();
Comentarios
El primer elemento de la lista de reenvíos no puede estar vacío.
Las funciones miembro nunca lanzan una excepción.
push_front
Agrega un elemento al principio de una lista de reenvíos.
void push_front(const Type& val);
void push_front(Type&& val);
Parámetros
val
El elemento que se agrega al principio de la lista de reenvíos.
Comentarios
Si se inicia una excepción, el contenedor se deja sin modificar y se vuelve a iniciar la excepción.
reference
Tipo que proporciona una referencia a un elemento de la lista de reenvíos.
typedef typename Allocator::reference reference;
remove
Borra elementos de una lista de reenvíos que coincide 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
La función miembro quita de la secuencia controlada todos los elementos, designados por el iterador P
, para el que *P == val
.
Las funciones miembro nunca lanzan una excepción.
remove_if
Borra elementos de una lista de reenvíos 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.
Comentarios
La función miembro quita de la secuencia controlada todos los elementos, designados por el iterador P
, para el que pred(*P)
es True.
Se produce una excepción solo si pred inicia una excepción. En ese caso, la secuencia controlada se deja en un estado no especificado y se vuelve a iniciar la excepción.
resize
Especifica un nuevo tamaño de una lista de reenvíos.
void resize(size_type _Newsize);
void resize(size_type _Newsize, const Type& val);
Parámetros
_Newsize
Número de elementos de la lista de reenvíos a la que se le ha cambiado el tamaño.
val
Valor que se va a usar para el relleno.
Comentarios
Las funciones miembro aseguran que el número de elementos de la lista sea de aquí en adelante _Newsize. Si la secuencia controlada tiene que ser más larga, la primera función miembro anexa elementos con el valor Type()
, mientras que la segunda función miembro anexa elementos con el valor val. Para que la secuencia controlada sea más corta, ambas funciones miembro llaman de forma eficaz a erase_after(begin() + _Newsize - 1, end())
.
reverse
Invierte el orden en que aparecen los elementos en una lista de reenvíos.
void reverse();
size_type
Tipo que representa la distancia sin signo entre dos elementos.
typedef typename Allocator::size_type size_type;
Comentarios
El tipo de entero sin signo describe un objeto que puede representar la longitud de cualquier secuencia controlada.
sort
Organiza los elementos en orden ascendente o con un orden especificado por un predicado.
void sort();
template <class Predicate>
void sort(Predicate pred);
Parámetros
pred
El predicado de ordenación.
Comentarios
Ambas funciones miembro ordenan los elementos de la secuencia controlada por un predicado, que se describe a continuación.
Para los iteradores Pi
y Pj
que designan elementos en posiciones i
y j
, la primera función miembro impone el orden !(*Pj < *Pi)
siempre que i < j
. (Los elementos se ordenan en orden ascending
). La segunda función miembro impone el orden ! pred(*Pj, *Pi)
siempre que i < j
. Ningún par ordenado de elementos de la secuencia controlada original se invierte en la secuencia controlada resultante. (El criterio de ordenación es estable).
Se produce una excepción solo si pred inicia una excepción. En ese caso, la secuencia controlada se deja en un orden no especificado y se vuelve a iniciar la excepción.
splice_after
Quita elementos de una forward_list de origen y los inserta en una forward_list de destino.
// insert the entire source forward_list
void splice_after(const_iterator Where, forward_list& Source);
void splice_after(const_iterator Where, forward_list&& Source);
// insert one element of the source forward_list
void splice_after(const_iterator Where, forward_list& Source, const_iterator Iter);
void splice_after(const_iterator Where, forward_list&& Source, const_iterator Iter);
// insert a range of elements from the source forward_list
void splice_after(
const_iterator Where,
forward_list& Source,
const_iterator First,
const_iterator Last);
void splice_after(
const_iterator Where,
forward_list&& Source,
const_iterator First,
const_iterator Last);
Parámetros
Where
La posición de la forward_list de destino después de la cual se insertan.
Origen
La forward_list de origen que debe insertarse en la forward_list de destino.
Iter
El elemento que debe insertarse de la forward_list de origen.
First
El elemento del intervalo que debe insertarse de la forward_list de origen.
Último
La primera posición de después del intervalo que debe insertarse de la forward_list de origen.
Comentarios
El primer par de funciones miembro inserta la secuencia controlada por Source justo después del elemento de la secuencia controlada señalada por Where. También quita todos los elementos de Source. (&Source
no debe ser igual que this
).
El segundo par de funciones miembro quita el elemento de justo después de Iter en la secuencia controlada por Source y lo inserta justo después del elemento de la secuencia controlada señalada por Where. (Si Where == Iter || Where == ++Iter
, no ocurre ningún cambio.)
El tercer par de funciones miembro (unión del intervalo) inserta el subintervalo designado por (First, Last)
de la secuencia controlada por Source justo después del elemento de la secuencia controlada señalada por Where. También quita el subintervalo original de la secuencia controlada por Source. (Si es &Source == this
, el intervalo (First, Last)
no debe incluir el elemento señalado por Where.)
Si la unión del intervalo inserta N
elementos y &Source != this
, un objeto de clase iterator se incrementa N
veces.
Ningún iterador, puntero ni referencia que designe elementos insertados deja de ser válido.
Ejemplo
// forward_list_splice_after.cpp
// compile with: /EHsc /W4
#include <forward_list>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
forward_list<int> c1{ 10, 11 };
forward_list<int> c2{ 20, 21, 22 };
forward_list<int> c3{ 30, 31 };
forward_list<int> c4{ 40, 41, 42, 43 };
forward_list<int>::iterator where_iter;
forward_list<int>::iterator first_iter;
forward_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_after(where_iter, c1);
cout << "After splicing c1 into c2:" << endl;
cout << "c1 = ";
print(c1);
cout << "c2 = ";
print(c2);
first_iter = c3.begin();
c2.splice_after(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;
c2.splice_after(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 = (10) (11)c2 = (20) (21) (22)c3 = (30) (31)c4 = (40) (41) (42) (43)After splicing c1 into c2:c1 =c2 = (20) (21) (10) (11) (22)After splicing the first element of c3 into c2:c3 = (30)c2 = (20) (21) (31) (10) (11) (22)After splicing a range of c4 into c2:c4 = (40) (41)c2 = (20) (21) (42) (43) (31) (10) (11) (22)
swap
Intercambia los elementos de dos listas de reenvío.
void swap(forward_list& right);
Parámetros
right
La lista de reenvíos que proporciona los elementos que se van a intercambiar.
Comentarios
La función miembro intercambia las secuencias controladas entre *this
y right. Si get_allocator() == right.get_allocator()
, lo hace en tiempo constante, no inicia ninguna excepción y no invalida ninguna referencia, puntero o iterador que designen elementos en las dos secuencias controladas. De lo contrario, realiza asignaciones de elementos y llamadas a constructores proporcionales al número de elementos de ambas secuencias controladas.
unique
Elimina todo menos el primer elemento de cada grupo consecutivo de elementos iguales.
void unique();
template <class BinaryPredicate>
void unique(BinaryPredicate comp);
Parámetros
comp
El predicado binario que se usa para comparar los elementos sucesivos.
Comentarios
Mantiene el primero de cada elemento único y elimina el resto. Los elementos deben estar ordenados para que los elementos del mismo valor sean adyacentes en la lista.
La primera función miembro quita de la secuencia controlada todos los elementos que equivalen al elemento anterior. Para los iteradores Pi
y Pj
que designan elementos en posiciones i
y j
, la segunda función miembro quita todos los elementos para los que i + 1 == j && comp(*Pi, *Pj)
.
Para una secuencia controlada de longitud N
(> 0), el predicado comp(*Pi, *Pj)
se evalúa N - 1
veces.
Se produce una excepción solo si comp
inicia una excepción. En ese caso, la secuencia controlada se deja en un estado no especificado y se vuelve a iniciar la excepción.
value_type
Tipo que representa el tipo de elemento almacenado en una lista de reenvíos.
typedef typename Allocator::value_type value_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla Type
.