(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 types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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++20) | |
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)....
If after the operation the newsize() is greater than oldcapacity() a reallocation takes place, in which case all iterators (including theend() iterator) and all references to the elements are invalidated. Otherwise only theend() iterator is invalidated.
Contents |
| args | - | arguments to forward to the constructor of the element |
| Type requirements | ||
-If any of the following conditions is satisfied, the behavior is undefined:
| ||
(none) | (until C++17) |
A reference to the inserted element. | (since C++17) |
Amortized constant.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).If the move constructor ofT is notnoexcept and is notCopyInsertable into*this,vector will use the throwing move constructor. If it throws, the guarantee is waived and the effects are unspecified.
Since reallocation may take place,emplace_back requires the element type to beMoveInsertable forvector.
The following code usesemplace_back to append an object of typePresident to astd::vector. 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 <vector>#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::vector<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::vector<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] |