std::deque<T,Allocator>::emplace_back
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) | |
(C++11) | Construye el elemento en el sitio. (función miembro pública) |