std::deque<T,Allocator>::emplace_back - cppreference.com

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

end()

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

EmplaceConstructible

. 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

std::deque

. 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<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)

[edit]

(C++11)

constructs element in-place
(public member function)

[edit]