From cppreference.com
template<class...Args>voidemplace_back(Args&&...args);(since C++11)
(until C++17)template<class...Args>referenceemplace_back(Args&&...args);(since C++17)Appends a new element to the end of the container. The element is constructed through
std::allocator_traits::construct
, which typically uses placement-new to construct the element in-place at the location provided by the container. The arguments args... are forwarded to the constructor as std::forward<Args>(args)....
All iterators (including the
iterator) are invalidated. No references are invalidated.
Parameters
args - arguments to forward to the constructor of the element Type requirements -T (the container's element type) must meet the requirements of
. Return value
(none)
(until C++17)A reference to the inserted element.
(since C++17)Complexity
Constant.
Exceptions
If an exception is thrown for any reason, this function has no effect (
strong exception safety guarantee
).
Example
The following code uses emplace_back to append an object of type President to a
. It demonstrates how emplace_back forwards parameters to the President constructor and shows how using emplace_back avoids the extra copy or move operation required when using
.
Run this code
#include<deque>#include<cassert>#include<iostream>#include<string>structPresident{std::stringname;std::stringcountry;intyear;President(std::stringp_name,std::stringp_country,intp_year):name(std::move(p_name)),country(std::move(p_country)),year(p_year){std::cout<<"I am being constructed.\n";}President(President&&other):name(std::move(other.name)),country(std::move(other.country)),year(other.year){std::cout<<"I am being moved.\n";}President&operator=(constPresident&other)=default;};intmain(){std::deque<President>elections;std::cout<<"emplace_back:\n";auto&ref=elections.emplace_back("Nelson Mandela","South Africa",1994);assert(ref.year==1994&&"uses a reference to the created object (C++17)");std::deque<President>reElections;std::cout<<"\npush_back:\n";reElections.push_back(President("Franklin Delano Roosevelt","the USA",1936));std::cout<<"\nContents:\n";for(Presidentconst&president:elections)std::cout<<president.name<<" was elected president of "<<president.country<<" in "<<president.year<<".\n";for(Presidentconst&president:reElections)std::cout<<president.name<<" was re-elected president of "<<president.country<<" in "<<president.year<<".\n";}Output:
emplace_back: I am being constructed. push_back: I am being constructed. I am being moved. Contents: Nelson Mandela was elected president of South Africa in 1994. Franklin Delano Roosevelt was re-elected president of the USA in 1936. See also
adds an element to the end
(public member function)
(C++11)
constructs element in-place
(public member function)