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.

fin

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_listright y los inserta en esta 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.

ordenar

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.