Difference between revisions of "Template:cpp/container/emplace back"
From cppreference.com
m (Update links.) |
(don't use ddcl) |
||
Line 1: | Line 1: | ||
{{cpp/container/{{{1|}}}/title | emplace_back}} | {{cpp/container/{{{1|}}}/title | emplace_back}} | ||
{{cpp/container/{{{1|}}}/navbar}} | {{cpp/container/{{{1|}}}/navbar}} | ||
− | {{ | + | {{dcl begin}} |
+ | {{dcl | since=c++11 | | ||
template< class... Args > | template< class... Args > | ||
void emplace_back( Args&&... args ); | void emplace_back( Args&&... args ); | ||
}} | }} | ||
+ | {{dcl end}} | ||
Appends a new element to the end of the container. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments that are supplied to the function. | Appends a new element to the end of the container. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments that are supplied to the function. |
Revision as of 03:58, 25 June 2013
template< class... Args > void emplace_back( Args&&... args ); |
(since C++11) | |
Appends a new element to the end of the container. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments that are supplied to the function.
Information on iterator invalidation is copied from here |
Contents |
Parameters
args | - | arguments to forward to the constructor of the element |
Return value
(none)
Complexity
Constant.
Example
The following code uses emplace_back
to append an object of type President
to a std::{{{1}}}. 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 push_back
.
Run this code
#include <{{{1}}}> #include <string> #include <iostream> 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::{{{1}}}<President> elections; std::cout << "emplace_back:\n"; elections.emplace_back("Nelson Mandela", "South Africa", 1994); std::{{{1}}}<President> reElections; std::cout << "\npush_back:\n"; reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936)); std::cout << "\nContents:\n"; for (President const& president: elections) { std::cout << president.name << " was elected president of " << president.country << " in " << president.year << ".\n"; } for (President const& 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 of std::{{{1}}} )
|