GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::deque::emplace_back(3) C++ Standard Libary std::deque::emplace_back(3)

std::deque::emplace_back - std::deque::emplace_back


template< class... Args > (since C++11)
void emplace_back( Args&&... args ); (until C++17)
template< class... Args > (since C++17)
reference emplace_back( Args&&... args );


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 past-the-end iterator, are invalidated. No references
are invalidated.


args - arguments to forward to the constructor of the element


-
T (the container's element type) must meet the requirements of EmplaceConstructible.


(none) (until C++17)
A reference to the inserted element. (since C++17)


Constant.


If an exception is thrown, this function has no effect (strong exception guarantee).


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 <string>
#include <cassert>
#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::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 (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";
}
}


emplace_back:
I am being constructed.


push_back:
I am being constructed.
I am being moved.


push_back adds an element to the end
(public member function)
emplace constructs element in-place
(C++11) (public member function)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.