vector::emplace_back in C++ STL - GeeksforGeeks

06 Feb, 2020
Vectors are same as dynamic arrays with the ability to resize itself automatically when an element is inserted or deleted, with their storage being handled automatically by the container.
This function is used to insert a new element into the vector container, the new element is added to the end of the vector.Syntax :
vectorname.emplace_back(value)
Parameters :
The element to be inserted into the vector
is passed as the parameter.
Result :
The parameter is added to the
vector at the end position.

Examples:
Input: myvector{1, 2, 3, 4, 5};
         myvector.emplace_back(6);
Output: myvector = 1, 2, 3, 4, 5, 6

Input: myvector{};
         myvector.emplace_back(4);
Output: myvector = 4

Errors and Exceptions:
It has a strong exception guarantee, therefore, no changes are made if an exception is thrown.The parameter should be of the same type as that of the container, otherwise, an error is thrown.
It has a strong exception guarantee, therefore, no changes are made if an exception is thrown.
The parameter should be of the same type as that of the container, otherwise, an error is thrown.
Example 1:
// INTEGER VECTOR EXAMPLE// CPP program to illustrate// Implementation of emplace() function#include <iostream>#include <vector>using namespace std;  int main(){    vector<int> myvector;    myvector.emplace_back(1);    myvector.emplace_back(2);    myvector.emplace_back(3);    myvector.emplace_back(4);    myvector.emplace_back(5);    myvector.emplace_back(6);    // vector becomes 1, 2, 3, 4, 5, 6      // printing the vector    for (auto it = myvector.begin(); it != myvector.end(); ++it)        cout << ' ' << *it;       return 0;      }
Output:
1 2 3 4 5 6

Example 2:
// STRING VECTOR EXAMPLE// CPP program to illustrate// Implementation of emplace() function#include <iostream>#include <vector>#include <string>using namespace std;  int main(){    // vector declaration    vector<string> myvector;    myvector.emplace_back("This");    myvector.emplace_back("is");    myvector.emplace_back("a");    myvector.emplace_back("computer science");    myvector.emplace_back("portal");      // vector becomes This, is, a computer science, portal      // printing the vector    for (auto it = myvector.begin(); it != myvector.end(); ++it)        cout << ' ' << *it;       return 0;      }
Output:
This is a computer science portal

Example 3:
// CHARACTER VECTOR EXAMPLE// CPP program to illustrate// Implementation of emplace() function#include <iostream>#include <vector>using namespace std;  int main(){    vector<char> myvector;    myvector.emplace_back('a');    myvector.emplace_back('c');    myvector.emplace_back('x');    myvector.emplace_back('y');    myvector.emplace_back('z');    // vector becomes a, c, x, y, z      // printing the vector    for (auto it = myvector.begin(); it != myvector.end(); ++it)        cout << ' ' << *it;       return 0;      }
Output:
a, c, x, y, z

Time Complexity: O(1)
Application:Given an empty vector, add integers to it using emplace_back function and then calculate its size.
Input  : 1, 2, 3, 4, 5, 6
Output : 6
Algorithm
Add elements to the vector using emplace_back functionCheck if the size of the vector is 0, if not, increment the counter variable initialised as 0, and pop the back element.Repeat this step until the size of the vector becomes 0.Print the final value of the variable.
Add elements to the vector using emplace_back function
Check if the size of the vector is 0, if not, increment the counter variable initialised as 0, and pop the back element.
Repeat this step until the size of the vector becomes 0.
Print the final value of the variable.
// CPP program to illustrate// Application of emplace_back function#include <iostream>#include <vector>using namespace std;   int main(){    int count = 0;    vector<int> myvector;    myvector.emplace_back(1);    myvector.emplace_back(2);    myvector.emplace_back(3);    myvector.emplace_back(4);    myvector.emplace_back(5);    myvector.emplace_back(6);    while (!myvector.empty()) {        count++;        myvector.pop_back();    }    cout << count;    return 0;}
Output:
6
emplace_back() vs push_back()
push_back() copies a string into a vector. First, a new string object will be implicitly created initialized with provided char*. Then push_back will be called which will copy this string into the vector using the move constructor because the original string is a temporary object. Then the temporary object will be destroyed.emplace_back() constructs a string in-place, so no temporary string will be created but rather emplace_back() will be called directly with char* argument. It will then create a string to be stored in the vector initialized with this char*. So, in this case, we avoid constructing and destroying an unnecessary temporary string object.
push_back() copies a string into a vector. First, a new string object will be implicitly created initialized with provided char*. Then push_back will be called which will copy this string into the vector using the move constructor because the original string is a temporary object. Then the temporary object will be destroyed.
emplace_back() constructs a string in-place, so no temporary string will be created but rather emplace_back() will be called directly with char* argument. It will then create a string to be stored in the vector initialized with this char*. So, in this case, we avoid constructing and destroying an unnecessary temporary string object.
Please see emplace vs insert in C++ STL for details.
// C++ code to demonstrate difference between// emplace_back and insert_back#include<bits/stdc++.h>using namespace std;    int main(){    // declaring priority queue    vector<pair<char, int>> vect;            // using emplace() to insert pair in-place    vect.emplace_back('a', 24);            // Below line would not compile    // vect.push_back('b', 25);                // using push_back() to insert    vect.push_back(make_pair('b', 25));                // printing the vector    for (int i=0; i<vect.size(); i++)        cout << vect[i].first << " " << vect[i].second             << endl;       return 0;}
Output:
a 24
b 25

dikshadha68
rajnr6
cpp-vector
STL
C++
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
C++ Classes and Objects
Virtual Function in C++
Operator Overloading in C++
Constructors in C++
Templates in C++ with Examples
vector erase() and clear() in C++
Socket Programming in C/C++
Substring in C++
Copy Constructor in C++
Polymorphism in C++