向量与动态数组相同,具有在插入或删除元素时自动调整自身大小的能力,并且容器自动处理其存储。
矢量:: emplace_back()
此函数用于将新元素插入向量容器,并将新元素添加到向量的末尾。
句法 :
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.
例子:
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
错误和异常:
- 它具有强大的异常保证,因此,如果引发异常,则不会进行任何更改。
- 该参数应与容器的类型相同,否则将引发错误。
范例1:
// INTEGER VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include
#include
using namespace std;
int main()
{
vector 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;
}
输出:
1 2 3 4 5 6
范例2:
// STRING VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include
#include
#include
using namespace std;
int main()
{
// vector declaration
vector 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;
}
输出:
This is a computer science portal
范例3:
// CHARACTER VECTOR EXAMPLE
// CPP program to illustrate
// Implementation of emplace() function
#include
#include
using namespace std;
int main()
{
vector 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;
}
输出:
a, c, x, y, z
时间复杂度: O(1)
应用:
给定一个空向量,请使用emplace_back函数向其添加整数,然后计算其大小。
Input : 1, 2, 3, 4, 5, 6
Output : 6
算法
- 使用emplace_back函数将元素添加到向量中
- 检查向量的大小是否为0,如果不是,则将初始化为0的计数器变量递增,并弹出back元素。
- 重复此步骤,直到向量的大小变为0。
- 打印变量的最终值。
// CPP program to illustrate
// Application of emplace_back function
#include
#include
using namespace std;
int main()
{
int count = 0;
vector 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;
}
输出:
6
emplace_back()与push_back()
- push_back()将字符串复制到向量中。首先,将使用提供的char *隐式创建一个新的字符串对象。然后将调用push_back,它将使用move构造函数将此字符串复制到向量中,因为原始字符串是一个临时对象。然后,临时对象将被销毁。
- emplace_back()可就地构造一个字符串,因此不会创建临时字符串,而直接用char *参数调用emplace_back()。然后,它将创建一个要存储在使用此char *初始化的向量中的字符串。因此,在这种情况下,我们避免构造和破坏不必要的临时字符串对象。
有关详细信息,请参见C++ STL中的emplace vs insert。
// C++ code to demonstrate difference between
// emplace_back and insert_back
#include
using namespace std;
int main()
{
// declaring priority queue
vector> 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
输出:
a 24
b 25
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。