Espacios de nombres
Variantes

std::forward_list::emplace_after

De cppreference.com
 
 
 
 
template< class... Args > 
iterator emplace_after( const_iterator pos, Args&&... args );
(desde C++11)

Inserta un nuevo elemento en una posición después de la posición especificada en el contenedor. El elemento se construye en el sitio, es decir, no se realizan operaciones de copia o movimiento. El constructor del elemento se llama con exactamente los mismos argumentos que se le proporcionaron a la función.

No se invalidan ni referencias ni iteradores.

Parámetros

pos - Iterador después del cual se construirá el nuevo elemento.
args - Los argumentos a reenviar al constructor del elemento.

Valor de retorno

Iterador al nuevo elemento.

Complejidad

Constante.

Excepciones

Si se lanza una excepción (p. ej., por el constructor), el contenedor no se modifica, como si esta función nunca se hubiera llamado (garantía de excepción fuerte).

Ejemplo

El ejemplo demuestra un llenado canónico de una lista simplemente enlazada en orden natural (a diferencia de orden inverso).

#include <forward_list>
#include <iostream>
#include <string>

struct Suma {
    std::string comentario;
    int suma;

    Suma(std::string comentario, int suma)
        : comentario{std::move(comentario)}, suma{suma} {}

    void imprimir() const {
        std::cout << comentario << " = " << suma << '\n';
    }
};

int main()
{
    std::forward_list<Suma> lista;

    auto iter = lista.before_begin();
    std::string cadena{"1"};
    for (int i{1}, suma{1}; i != 10; suma += i) {
        iter = lista.emplace_after(iter, cadena, suma);
        ++i;
        cadena += " + " + std::to_string(i);
    }

    for (const Suma& s : lista) s.imprimir();
}

Salida:

1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15
1 + 2 + 3 + 4 + 5 + 6 = 21
1 + 2 + 3 + 4 + 5 + 6 + 7 = 28
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

Véase también

Inserta elementos después de un elemento.
(función miembro pública) [editar]