(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Deduction guides(C++17) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template<class...Args> void emplace_back( Args&&...args); | (until C++17) | |
template<class...Args> reference emplace_back( Args&&...args); | (since C++17) (constexpr since C++26) | |
Appends a new element to the end of the container. The element is constructed throughstd::allocator_traits::construct, which typically uses placementnew to construct the element in-place at the location provided by the container. The argumentsargs... are forwarded to the constructor asstd::forward<Args>(args)....
No iterators or references are invalidated.
Contents |
| args | - | arguments to forward to the constructor of the element |
| Type requirements | ||
-IfT is notEmplaceConstructible intolist fromargs..., the behavior is undefined. | ||
(none) | (until C++17) |
A reference to the inserted element. | (since C++17) |
Constant.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
The following code usesemplace_back to append an object of typePresident to astd::list. It demonstrates howemplace_back forwards parameters to thePresident constructor and shows how usingemplace_back avoids the extra copy or move operation required when usingpush_back.
#include <list>#include <cassert>#include <iostream>#include <string> struct President{std::string name;std::string country;int year; President(std::string p_name,std::string p_country,int p_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=(const President& other)=default;}; int main(){std::list<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::list<President> reElections;std::cout<<"\npush_back:\n"; reElections.push_back(President("Franklin Delano Roosevelt","the USA",1936)); std::cout<<"\nContents:\n";for(const President& president: elections)std::cout<< president.name<<" was elected president of "<< president.country<<" in "<< president.year<<".\n"; for(const President& 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.
| adds an element to the end (public member function)[edit] | |
(C++11) | constructs element in-place (public member function)[edit] |