Espacios de nombres
Variantes
Acciones

std::deque<T,Allocator>::emplace_back

De cppreference.com
< cpp‎ | container‎ | deque
 
 
 
 
template<class... Args>
void emplace_back( Args&&... args);
(desde C++11)
(hasta C++17)
template<class... Args>
reference emplace_back( Args&&... args);
(desde C++17)

Anexa un nuevo elemento al final del contenedor. El elemento se construye a través de std::allocator_traits::construct, que por lo general utiliza new de ubicación para construir el elemento en el sitio en una ubicación proporcionada por el contenedor. Los argumentos args... se reenvían al constructor como std::forward<Args>(args)....

Se invalidan todos los iteradores, incluyendo el iterador después del final. No se invalida ninguna referencia.

Contenido

[editar]Parámetros

args - Argumentos a reenviar al constructor del elemento.
Requisitos de tipo
-
T (el tipo de elemento del contenedor) debe satisfacer los requisitos de EmplaceConstructible.

[editar]Return value

(Ninguno)

(hasta C++17)

Una referencia al elemento insertado.

(desde C++17)

[editar]Complejidad

Constante.

[editar]Excepciones

Si se lanza una excepción, esta función no tiene efecto (garantía de excepción fuerte).


[editar]Ejemplo

El siguiente código utiliza emplace_back para anexar un objeto de tipo Presidente a un std::deque. Demuestra cómo emplace_back reenvía los parámetros al constructor de Presidente y muestra cómo el uso de emplace_back evita la operación de copia o movimiento extra requerida al usar push_back.

#include <deque>#include <string>#include <cassert>#include <iostream>   struct Presidente {std::string nombre;std::string pais;int periodo;   Presidente(std::string p_nombre, std::string p_pais, int p_periodo): nombre(std::move(p_nombre)), pais(std::move(p_pais)), periodo(p_periodo){std::cout<<"Me construyen.\n";} Presidente(Presidente&& otro): nombre(std::move(otro.nombre)), pais(std::move(otro.pais)), periodo(otro.periodo){std::cout<<"Me mueven.\n";} Presidente& operator=(const Presidente& otro)=default;};   int main(){std::deque<Presidente> elecciones;std::cout<<"emplace_back:\n";auto& ref = elecciones.emplace_back("Nelson Mandela", "Sudáfrica", 1994);assert(ref.periodo==1994&&"usa una referencia al objeto creado (C++17)");   std::deque<Presidente> reelecciones;std::cout<<"\npush_back:\n"; reelecciones.push_back(Presidente("Franklin Delano Roosevelt", "los Estados Unidos", 1936));   std::cout<<"\nContenido:\n";for(Presidente const& presidente: elecciones){std::cout<< presidente.nombre<<" fue reelegido presidente de "<< presidente.pais<<" en "<< presidente.periodo<<".\n";}for(Presidente const& presidente: reelecciones){std::cout<< presidente.nombre<<" fue reelegido presidente de "<< presidente.pais<<" en "<< presidente.periodo<<".\n";}}

Salida:

emplace_back: Me construyen.   push_back: Me construyen. Me mueven.   Contenido: Nelson Mandela fue reelegido presidente de Sudáfrica en 1994. Franklin Delano Roosevelt fue reelegido presidente de los Estados Unidos en 1936.

[editar]Véase también

Agrega elementos al final.
(función miembro pública)[editar]
(C++11)
Construye el elemento en el sitio.
(función miembro pública)[editar]
close