📜  C ++ STL向量中的push_back()vs emplace_back()(1)

📅  最后修改于: 2023-12-03 14:39:38.141000             🧑  作者: Mango

C++ STL向量中的push_back() vs emplace_back()

在C++中,STL(标准模板库)向量是一种非常常用的序列容器,它可以在运行时自动调整大小。在向向量中添加元素时,有两种常用的方法:push_back() 和 emplace_back()。

push_back()

push_back()方法可以将给定元素添加到向量的末尾。该方法的常规用法如下所示:

vector<int> v;
v.push_back(10);
v.push_back(20);

在上面的代码中,我们首先声明了一个整数向量v,然后使用push_back()方法向向量中添加元素。第一次使用push_back()方法添加了整数10,第二次使用该方法添加了整数20

这种方法的优点是它可以添加任何类型的元素。但是,它需要构造对象,并插入再次复制构造的元素。这可能会导致程序的性能下降(尤其是在添加大量元素时)。

emplace_back()

emplace_back()方法与push_back()方法类似,但是它允许您直接在向量末尾就地构造元素。使用此方法可以更高效地添加元素。以下是使用emplace_back()方法的代码示例:

vector<pair<int, int>> v;
v.emplace_back(10, 20);

在上面的代码中,我们声明了一个pair类型的向量v,然后使用emplace_back()方法将元素1020作为pair类型的向量直接添加到向量末尾。

这种方法的优点是它避免了不必要的构造和拷贝操作,从而可以提高程序的性能。但是,它仅限于可以直接构造的元素类型。

总结

在大多数情况下,使用emplace_back()方法可以更好地添加元素,因为它可以更高效地添加元素。但是,如果您需要添加不能直接构造的元素类型,或者您需要将元素添加到向量的中间位置,那么使用push_back()将更加方便。