📅  最后修改于: 2023-12-03 15:13:55.064000             🧑  作者: Mango
在C++ STL中,vector是最常用的容器之一。push_back()和emplace_back()是vector中添加新元素的两种方法。
push_back()方法可以将一个元素添加到vector的末尾。其语法如下:
vector_name.push_back(value)
其中,vector_name代表vector的名称,value代表要添加的元素。
例如,下面的代码创建了一个大小为5的int型vector,然后通过push_back()方法添加了两个元素:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec{1, 2, 3, 4, 5};
vec.push_back(6);
vec.push_back(7);
for (auto i : vec)
cout << i << " ";
return 0;
}
输出:
1 2 3 4 5 6 7
emplace_back()方法与push_back()类似,都可以在vector的末尾添加元素。但是,它是直接在vector的末尾构造一个新元素,而不是先构造一个对象再拷贝到vector中。这样可以避免额外的构造和拷贝开销,提高程序效率。
其语法如下:
vector_name.emplace_back(args)
其中,vector_name代表vector的名称,args代表新元素的构造参数列表。
例如,下面的代码创建了一个大小为0的Person型vector,然后通过emplace_back()方法添加了两个Person对象:
#include <iostream>
#include <vector>
using namespace std;
class Person
{
public:
Person(int _age, string _name) : age(_age), name(_name) {}
int age;
string name;
};
int main()
{
vector<Person> vec;
vec.emplace_back(20, "Alice");
vec.emplace_back(25, "Bob");
for (auto p : vec)
cout << p.age << " " << p.name << endl;
return 0;
}
输出:
20 Alice
25 Bob
需要注意的是,emplace_back()方法的参数会被直接传递给vector中元素的构造函数。因此,如果vector中存储的是指针,需要传递指向new出来的对象的指针,而不是指针本身。
push_back()和emplace_back()都是向vector中添加新元素的方法,但是它们的实现方式不同。一般来说,我们应该尽量使用emplace_back(),以提高程序效率。