Compartilhar via


Classe forward_list

Descreve um objeto que controla uma sequência de elementos de tamanho variado. A sequência é armazenada como uma lista de nós vinculada exclusivamente, com cada um contendo um membro do tipo Type.

Sintaxe

template <class Type,
    class Allocator = allocator<Type>>
class forward_list

Parâmetros

Type*
O tipo de dados do elemento a ser armazenado na forward_list.

Allocator
O objeto alocador armazenado que encapsula detalhes sobre a alocação e desalocação de memória na forward_list. Esse parâmetro é opcional. O valor padrão é allocator<Type>.

Comentários

O objeto forward_list aloca e libera armazenamento para a sequência que controla por meio de um objeto armazenado da classe Allocator que é baseado na Classe allocator (normalmente conhecido como std::allocator)). Para obter mais informações, consulte o Alocadores. Um objeto alocador precisa ter a mesma interface externa que um objeto de tipo allocator.

Observação

O objeto alocador armazenado não é copiado quando o objeto de contêiner é atribuído.

Iteradores, ponteiros e referências podem se tornar inválidos quando elementos de sua sequência são apagados por meio de forward_list. Inserções e uniões executadas na sequência controlada por meio de forward_list não invalidam iteradores.

Adições à sequência controlada podem ocorrer por chamadas para forward_list::insert_after, que é a única função membro que chama o construtor Type(const T&). forward_list também pode chamar construtores de movimento. Se a expressão gerar uma exceção, o objeto de contêiner não insere novos elementos e gera a exceção novamente. Portanto, um objeto do tipo forward_list é deixado em um estado conhecido quando essas exceções ocorrem.

Membros

Construtores

Nome Descrição
forward_list Constrói um objeto do tipo forward_list.

Typedefs

Nome Descrição
allocator_type Um tipo que representa a classe de alocador para um objeto de lista de encaminhamento.
const_iterator Um tipo que fornece um iterador constante para a lista de encaminhamento.
const_pointer Um tipo que fornece um ponteiro para um elemento const em uma lista de encaminhamento.
const_reference Um tipo que fornece uma referência constante a um elemento na lista de encaminhamento.
difference_type Um tipo de inteiro com sinal que pode ser usado para representar o número de elementos de uma lista de encaminhamento em um intervalo entre os elementos apontados por iteradores.
iterator Um tipo que fornece um iterador para a lista de encaminhamento.
pointer Um tipo que fornece um ponteiro para um elemento na lista de encaminhamento.
referência Um tipo que fornece uma referência para um elemento na lista de encaminhamento.
size_type Um tipo que representa a distância sem sinal entre dois elementos.
value_type Um tipo que representa o tipo de elemento armazenado em uma lista de encaminhamento.

Funções

Nome Descrição
assign Apaga elementos de uma lista de encaminhamento e copia um novo conjunto de elementos para uma lista de encaminhamento de destino.
before_begin Retorna um iterador que trata da posição antes do primeiro elemento em uma lista de encaminhamento.
begin Retorna um iterador que trata do primeiro elemento em uma lista de encaminhamento.
cbefore_begin Retorna um iterador const que trata da posição antes do primeiro elemento em uma lista de encaminhamento.
cbegin Retorna um iterador const que trata do primeiro elemento em uma lista de encaminhamento.
cend Retorna um iterador const que trata do local após o último elemento em uma lista de encaminhamento.
clear Apaga todos os elementos de uma lista de encaminhamento.
emplace_after Move constructos de um novo elemento após uma posição especificada.
emplace_front Adiciona um elemento construído no local ao início da lista.
empty Testa se uma lista de encaminhamento está vazia.
end Retorna um iterador que trata do local após o último elemento em uma lista de encaminhamento.
erase_after Remove elementos da lista de encaminhamento depois de uma posição especificada.
front Retorna uma referência ao primeiro elemento em uma lista de encaminhamento.
get_allocator Retorna uma cópia do objeto alocador usado para construir uma lista de encaminhamento.
insert_after Adiciona elementos à lista de encaminhamento depois de uma posição especificada.
max_size Retorna o tamanho máximo de uma lista de encaminhamento.
merge Remove os elementos da lista de argumentos, insere-os na lista de encaminhamento de destino e ordena o conjunto novo conjunto combinado de elementos em ordem crescente ou em alguma outra ordem especificada.
pop_front Exclui o elemento no início de uma lista de encaminhamento.
push_front Adiciona um elemento as início de uma lista de encaminhamento.
remove Apaga elementos em uma lista de encaminhamento que correspondem a um valor especificado.
remove_if Apaga os elementos da lista de encaminhamento para os quais um predicado especificado foi atendido.
resize Especifica um novo tamanho para uma lista de encaminhamento.
reverse Reverte a ordem na qual os elementos ocorrem em uma lista de encaminhamento.
sort Organiza os elementos em ordem crescente ou em uma ordem especificada por um predicado.
splice_after Costura novamente links entre os nós.
troca Troca os elementos de duas listas de encaminhamento.
unique Remove elementos adjacentes que são passados a um teste especificado.

Operadores

Nome Descrição
operator= Substitui os elementos da lista de encaminhamento por uma cópia de outra lista de encaminhamento.

allocator_type

Um tipo que representa a classe de alocador para um objeto de lista de encaminhamento.

typedef Allocator allocator_type;

Comentários

allocator_type é um sinônimo do parâmetro de modelo Allocator.

assign

Apaga elementos de uma lista de encaminhamento e copia um novo conjunto de elementos para uma lista de encaminhamento 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
O início do intervalo de substituição.

last
O final do intervalo de substituição.

count
O número de elementos a serem atribuídos.

val
O valor a atribuir a cada elemento.

Tipo
O tipo do valor.

IList
A initializer_list a ser copiada.

Comentários

Se a forward_list for um tipo inteiro, a primeira função membro se comportará como assign((size_type)First, (Type)Last). Caso contrário, a primeira função membro substitui a sequência controlada por *this pela sequência [First, Last), que não deve se sobrepor à sequência controlada inicial.

A segunda função membro substitui a sequência controlada por *this por uma repetição de elementos Count de valor Val.

A terceira função membro copia os elementos de initializer_list para forward_list.

before_begin

Retorna um iterador que trata da posição antes do primeiro elemento em uma lista de encaminhamento.

const_iterator before_begin() const;
iterator before_begin();

Valor de retorno

Um iterador de encaminhamento que aponta para o primeiro elemento da sequência (ou imediatamente antes do fim de uma sequência vazia).

Comentários

begin

Retorna um iterador que trata do primeiro elemento em uma lista de encaminhamento.

const_iterator begin() const;
iterator begin();

Valor de retorno

Um iterador de encaminhamento que aponta para o primeiro elemento da sequência (ou imediatamente após o fim de uma sequência vazia).

Comentários

cbefore_begin

Retorna um iterador const que trata da posição antes do primeiro elemento em uma lista de encaminhamento.

const_iterator cbefore_begin() const;

Valor de retorno

Um iterador de encaminhamento que aponta para o primeiro elemento da sequência (ou imediatamente antes do fim de uma sequência vazia).

Comentários

cbegin

Retorna um iterador const que trata o primeiro elemento no intervalo.

const_iterator cbegin() const;

Valor de retorno

Um iterador de acesso por avanço const que aponta o primeiro elemento do intervalo ou o local logo após o fim de um intervalo vazio (para um intervalo vazio, cbegin() == cend()).

Comentários

Com o valor retornado de cbegin, os elementos no intervalo não podem ser modificados.

Você pode usar essa função membro no lugar da função membro begin(), de modo a garantir que o valor de retorno seja const_iterator. Normalmente, ela é usada com a palavra-chave de dedução de tipo auto, conforme mostrado no exemplo a seguir. No exemplo, considere Container como um contêiner modificável (não const) de qualquer tipo, que dá suporte para begin() e cbegin().

auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator

cend

Retorna um iterador const que trata o local logo após o último elemento em um intervalo.

const_iterator cend() const;

Valor de retorno

Um iterador de acesso por avanço que aponta para além do fim do intervalo.

Comentários

cend é usado para testar se um iterador passou do fim de seu intervalo.

Você pode usar essa função membro no lugar da função membro end(), de modo a garantir que o valor de retorno seja const_iterator. Normalmente, ela é usada com a palavra-chave de dedução de tipo auto, conforme mostrado no exemplo a seguir. No exemplo, considere Container como um contêiner modificável (não const) de qualquer tipo, que dá suporte para end() e cend().

auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();

// i2 is Container<T>::const_iterator

O valor retornado por cend não deve ser desreferenciado.

clear

Apaga todos os elementos de uma lista de encaminhamento.

void clear();

Comentários

Essa função de membro chama erase_after(before_begin(), end()).

const_iterator

Um tipo que fornece um iterador constante para a lista de encaminhamento.

typedef implementation-defined const_iterator;

Comentários

const_iterator descreve um objeto que pode servir como um iterador de encaminhamento constante para a sequência controlada. Ele é descrito aqui como sinônimo de um tipo definido pela implementação.

const_pointer

Um tipo que fornece um ponteiro para um elemento const em uma lista de encaminhamento.

typedef typename Allocator::const_pointer
    const_pointer;

Comentários

const_reference

Um tipo que fornece uma referência constante a um elemento na lista de encaminhamento.

typedef typename Allocator::const_reference const_reference;

Comentários

difference_type

Um tipo de inteiro com sinal que pode ser usado para representar o número de elementos de uma lista de encaminhamento em um intervalo entre os elementos apontados por iteradores.

typedef typename Allocator::difference_type difference_type;

Comentários

difference_type descreve um objeto que pode representar a diferença entre os endereços de dois elementos na sequência controlada.

emplace_after

Move constructos de um novo elemento após uma posição especificada.

template <class T>
iterator emplace_after(const_iterator Where, Type&& val);

Parâmetros

Onde
A posição na lista de encaminhamento de destino em que o novo elemento é criado.

val
O argumento do construtor.

Valor de retorno

Um iterador que designa o elemento recém-inserido.

Comentários

Essa função membro insere um elemento com os argumentos de construtor val logo após o elemento apontado por Where na sequência controlada. Seu comportamento é, nos outros aspectos, o mesmo que forward_list::insert_after.

emplace_front

Adiciona um elemento construído no local ao início da lista.

template <class Type>
    void emplace_front(Type&& val);

Parâmetros

val
O elemento adicionado ao início da lista de encaminhamento.

Comentários

Essa função membro insere um elemento com os argumentos de construtor _ val após o final da sequência controlada.

Se uma exceção for gerada, o contêiner permanecerá inalterado e a exceção será gerada novamente.

empty

Testa se uma lista de encaminhamento está vazia.

bool empty() const;

Valor de retorno

true se a lista de encaminhamento estiver vazia; caso contrário, false.

end

Retorna um iterador que trata do local após o último elemento em uma lista de encaminhamento.

const_iterator end() const;
iterator end();

Valor de retorno

Um iterador de encaminhamento que aponta para logo após o fim da sequência.

erase_after

Remove elementos da lista de encaminhamento depois de uma posição especificada.

iterator erase_after(const_iterator Where);
iterator erase_after(const_iterator first, const_iterator last);

Parâmetros

Onde
A posição na lista de encaminhamento de destino em que o novo elemento é apagado.

first
O início do intervalo a ser apagado.

last
O final do intervalo a ser apagado.

Valor de retorno

Um iterador que designa o primeiro elemento restante além de todos os elementos removidos ou forward_list::end se esse elemento não existir.

Comentários

A primeira função membro remove o elemento da sequência controlada logo após Where.

A segunda função membro remove os elementos da sequência controlada no intervalo ( first, last) (nenhum ponto de extremidade está incluído).

Apagar elementos N causas chamadas de destruidor de N. A realocação ocorre, de modo que referências e iteradores tornam-se inválidos para os elementos apagados.

As funções membro nunca geram uma exceção.

forward_list

Constrói um objeto do 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
A classe de alocador a ser usada com esse objeto.

Count
O número de elementos na lista construída.

Val
O valor dos elementos na lista construída.

Right
A lista da qual a lista construída é uma cópia.

First
A posição do primeiro elemento no intervalo de elementos a serem copiados.

Last
A posição do primeiro elemento além do intervalo de elementos a serem copiados.

IList
A initializer_list a ser copiada.

Comentários

Todos os construtores armazenam um alocador e inicializam a sequência controlada. O objeto alocador será o argumento Al, se estiver presente. Para o construtor de cópia, ele será right.get_allocator(). Caso contrário, é Allocator().

Os primeiros dois construtores especificam uma sequência controlada inicial vazia.

O terceiro construtor especifica uma repetição de Count elementos de valor Type().

O quarto e o quinto construtor especificam uma repetição de Count elementos de valor Val.

O sexto construtor especifica uma cópia da sequência controlada por Right. Se InputIterator for um tipo inteiro, os dois construtores seguintes especificam uma repetição de elementos (size_type)First de valor (Type)Last. Caso contrário, os dois construtores seguintes especificam a sequência [First, Last).

O nono e o décimo construtor são os mesmos que o sexto, mas com uma referência de rvalue.

O último construtor especifica a sequência controlada inicial com um objeto da classe initializer_list<Type>.

front

Retorna uma referência ao primeiro elemento em uma lista de encaminhamento.

reference front();
const_reference front() const;

Valor de retorno

Uma referência ao primeiro elemento da sequência controlada, que não pode ser vazio.

get_allocator

Retorna uma cópia do objeto alocador usado para construir uma lista de encaminhamento.

allocator_type get_allocator() const;

Valor de retorno

O objeto allocator armazenado.

insert_after

Adiciona elementos à lista de encaminhamento depois de uma posição 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

Onde
A posição na lista de encaminhamento de destino em que o primeiro elemento é inserido.

Count
O número de elementos a serem inseridos.

First
O início do intervalo de inserção.

Last
O final do intervalo de inserção.

Val
O elemento adicionado à lista de encaminhamento.

IList
A initializer_list a ser inserida.

Valor de retorno

Um iterador que designa o elemento recém-inserido (apenas a primeira e a última função membro).

Comentários

Cada uma das funções membro insere — logo após o elemento apontado por Where na sequência controlada — uma sequência especificada pelos operandos restantes.

A primeira função membro insere um elemento que tem o valor Val e retorna um iterador que designa o elemento recém-inserido.

A segunda função membro insere uma repetição de Count elementos de valor Val.

Se InputIterator for um tipo inteiro, a terceira função membro se comportará da mesma forma que insert(it, (size_type)First, (Type)Last). Caso contrário, inserirá a sequência [First, Last), que não pode se sobrepor à sequência controlada inicial.

A quarta função membro insere a sequência especificada por um objeto da classe initializer_list<Type>.

A última operação membro é a mesma que a primeira, mas com uma referência de rvalue.

Inserir elementos N causa chamadas de construtor de N. A realocação ocorre, mas nenhum iterador ou referência se torna inválida.

Se uma exceção for gerada durante a inserção de um ou mais elementos, o contêiner permanecerá inalterado e a exceção será gerada novamente.

iterator

Um tipo que fornece um iterador para a lista de encaminhamento.

typedef implementation-defined iterator;

Comentários

iterator descreve um objeto que pode servir como um iterador de encaminhamento para a sequência controlada. Ele é descrito aqui como sinônimo de um tipo definido pela implementação.

max_size

Retorna o tamanho máximo de uma lista de encaminhamento.

size_type max_size() const;

Valor de retorno

O tamanho da sequência mais longa que o objeto pode controlar.

Comentários

merge

Combina duas sequências classificadas em uma única sequência classificada em tempo linear. Remove os elementos da lista de argumentos e os insere neste forward_list. As duas listas devem ser classificadas pelo objeto de função de comparação antes da chamada para merge. A lista combinada será classificada pelo objeto de função de comparação.

void merge(forward_list& right);
template <class Predicate>
    void merge(forward_list& right, Predicate comp);

Parâmetros

direita
A lista de encaminhamento a ser mesclada.

comp
O objeto de função compare que é usado para classificar elementos.

Comentários

forward_list::merge remove os elementos de forward_listright e os insere neste forward_list. As duas sequências devem ser ordenadas pelo mesmo predicado, descrito abaixo. A sequência combinada também é ordenada por esse objeto de função de comparação.

Para os iteradores Pi e Pj que designam elementos nas posições i e j, a primeira função membro impõe a ordem !(*Pj < *Pi) sempre que i < j. (Os elementos são classificados em ordem ascending.) A segunda função membro impõe a ordem ! comp(*Pj, *Pi) sempre que i < j.

Nenhum par de elementos na sequência controlada original é revertido na sequência controlada resultante. Se um par de elementos na sequência controlada resultante for igual a (!(*Pi < *Pj) && !(*Pj < *Pi)), um elemento da sequência controlada original aparecerá antes de um elemento da sequência controlada por right.

Uma exceção ocorre somente se comp gerar uma exceção. Nesse caso, a sequência controlada será deixada em uma ordem não especificada e a exceção será gerada novamente.

operator=

Substitui os elementos da lista de encaminhamento por uma cópia de outra lista de encaminhamento.

forward_list& operator=(const forward_list& right);
forward_list& operator=(initializer_list<Type> IList);
forward_list& operator=(forward_list&& right);

Parâmetros

direita
A lista de encaminhamento que está sendo copiada para a lista de encaminhamento.

IList
Uma lista de inicializadores entre chaves, que se comporta exatamente como uma sequência de elementos do tipo Type.

Comentários

O primeiro operador de membro substitui a sequência controlada por uma cópia da sequência controlada por right.

O segundo operador membro substitui a sequência controlada de um objeto da classe initializer_list<Type>.

O terceiro operador membro é o mesmo que a primeiro, mas com uma referência de rvalue.

pointer

Um tipo que fornece um ponteiro para um elemento na lista de encaminhamento.

typedef typename Allocator::pointer pointer;

pop_front

Exclui o elemento no início de uma lista de encaminhamento.

void pop_front();

Comentários

O primeiro elemento da lista de encaminhamento não pode ser vazio.

A função membro nunca gera uma exceção.

push_front

Adiciona um elemento as início de uma lista de encaminhamento.

void push_front(const Type& val);
void push_front(Type&& val);

Parâmetros

val
O elemento adicionado ao início da lista de encaminhamento.

Comentários

Se uma exceção for gerada, o contêiner permanecerá inalterado e a exceção será gerada novamente.

reference

Um tipo que fornece uma referência para um elemento na lista de encaminhamento.

typedef typename Allocator::reference reference;

remove

Apaga elementos em uma lista de encaminhamento que correspondem a um valor especificado.

void remove(const Type& val);

Parâmetros

val
O valor que, se mantido por um elemento, resultará na remoção de tal elemento da lista.

Comentários

A função membro remove da sequência controlada todos os elementos, designados pelo iterador P, para os quais *P == val.

A função membro nunca gera uma exceção.

remove_if

Apaga os elementos da lista de encaminhamento para os quais um predicado especificado foi atendido.

template <class Predicate>
    void remove_if(Predicate pred);

Parâmetros

pred
O predicado unário que, se atendido por um elemento, resultará na exclusão de tal elemento da lista.

Comentários

A função membro remove da sequência controlada todos os elementos designados pelo iterador P para os quais pred(*P) é verdadeiro.

Uma exceção ocorrerá somente se pred gerar uma exceção. Nesse caso, a sequência controlada é deixada em um estado não especificado e a exceção é gerada novamente.

redimensionar

Especifica um novo tamanho para uma lista de encaminhamento.

void resize(size_type _Newsize);
void resize(size_type _Newsize, const Type& val);

Parâmetros

_Newsize
O número de elementos na lista de encaminhamento redimensionada.

val
O valor a ser usado para preenchimento.

Comentários

As funções membro garantem que o número de elementos na lista daqui por diante seja _Newsize. Se for necessário tornar a sequência controlada mais longa, a primeira função membro acrescenta elementos com valor Type(), enquanto a segunda função membro acrescenta elementos com valor val. Para tornar a sequência controlada mais curta, as duas funções membro efetivamente chamam erase_after(begin() + _Newsize - 1, end()).

reverse

Reverte a ordem na qual os elementos ocorrem em uma lista de encaminhamento.

void reverse();

size_type

Um tipo que representa a distância sem sinal entre dois elementos.

typedef typename Allocator::size_type size_type;

Comentários

O tipo inteiro sem sinal descreve um objeto que pode representar o tamanho de qualquer sequência controlada.

sort

Organiza os elementos em ordem crescente ou em uma ordem especificada por um predicado.

void sort();
template <class Predicate>
void sort(Predicate pred);

Parâmetros

pred
O predicado de ordenação.

Comentários

As duas funções membro ordenam os elementos na sequência controlada por um predicado, descrito abaixo.

Para os iteradores Pi e Pj que designam elementos nas posições i e j, a primeira função membro impõe a ordem !(*Pj < *Pi) sempre que i < j. (Os elementos são classificados em ordem ascending.) A função membro de modelo impõe a ordem ! pred(*Pj, *Pi) sempre que i < j. Nenhum par ordenado de elementos na sequência controlada original é revertido na sequência controlada resultante. (A classificação é estável).

Uma exceção ocorrerá somente se pred gerar uma exceção. Nesse caso, a sequência controlada será deixada em uma ordem não especificada e a exceção será gerada novamente.

splice_after

Remove elementos de uma forward_list de origem e os insere em uma 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

Onde
A posição na forward_list de destino após a qual o elemento deve ser inserido.

Origem
A forward_list de origem que deve ser inserida na forward_list de destino.

Iter
O elemento a ser inserido da forward_list de origem.

First
O primeiro elemento no intervalo a ser inserido da forward_list de origem.

Last
A primeira posição além do intervalo a ser inserida da forward_list de origem.

Comentários

O primeiro par de funções membro insere a sequência controlada por Source após o elemento na sequência controlada apontada por Where. Ele também remove todos os elementos de Source. (&Source não deve ser igual a this.)

O segundo par de funções membro remove o elemento imediatamente após Iter na sequência controlada por Source e o insere imediatamente após o elemento na sequência controlada apontada por Where. (Se Where == Iter || Where == ++Iter, nenhuma alteração ocorrerá.)

O terceiro par de funções membro (união com intervalos) insere o subintervalo designado por (First, Last) da sequência controlada por Source imediatamente após o elemento na sequência controlada apontada por Where. Ele também remove o subintervalo original da sequência controlada por Source. (Se &Source == this, o intervalo (First, Last) não pode incluir o elemento apontado por Where.)

Se a união no intervalo inserir elementos N e &Source != this, um objeto da classe iterator será incrementado N vezes.

Nenhum iterador, ponteiro ou referência que designa elementos unidos se torna inválido.

Exemplo

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

troca

Troca os elementos de duas listas de encaminhamento.

void swap(forward_list& right);

Parâmetros

direita
A lista de encaminhamento que fornece os elementos a serem trocados.

Comentários

A função membro troca as sequências controladas entre *this e direita. Se get_allocator() == right.get_allocator(), ela faz isso em tempo constante, não gera exceções e não invalida referências, ponteiros ou iteradores que designam elementos nas duas sequências controlados. Caso contrário, ela executa atribuições de elemento e chamadas ao construtor proporcionais ao número de elementos nas duas sequências controladas.

unique

Elimina todos, exceto pelo primeiro elemento de cada grupo consecutivo de elementos iguais.

void unique();
template <class BinaryPredicate>
void unique(BinaryPredicate comp);

Parâmetros

comp
O predicado binário usado para comparar elementos sucessivos.

Comentários

Mantém o primeiro de cada elemento exclusivo e remove o restante. Os elementos devem ser classificados para que elementos do mesmo valor fiquem adjacentes na lista.

A primeira função membro remove da sequência controlada todos os elementos que, na comparação, são iguais ao elemento anterior. Para os iteradores Pi e Pj que designam elementos nas posições i e j, a segunda função membro remove todos os elementos para os quais i + 1 == j && comp(*Pi, *Pj).

Para uma sequência controlada de tamanho N (> 0), o predicado comp(*Pi, *Pj) é avaliado N - 1 vezes.

Uma exceção ocorre somente se comp gerar uma exceção. Nesse caso, a sequência controlada é deixada em um estado não especificado e a exceção é gerada novamente.

value_type

Um tipo que representa o tipo de elemento armazenado em uma lista de encaminhamento.

typedef typename Allocator::value_type value_type;

Comentários

O tipo é um sinônimo do parâmetro de modeloType.