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).
Ejecuta este código
#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
(C++11) |
Inserta elementos después de un elemento. (función miembro pública) |