📜  C++ STL中的向量emplace()函数(1)

📅  最后修改于: 2023-12-03 15:29:51.315000             🧑  作者: Mango

C++ STL中的向量emplace()函数

在C++中,标准模板库(STL)为我们提供了使用向量(vector)的能力。向量是一种动态大小的数组,可以随着添加或删除元素而自动调整大小。在向量中添加元素有很多种方法,其中一种是使用emplace()函数。

emplace()函数的定义

emplace()函数是一个C++11引入的新函数,用于在向量的指定位置构造新对象。该函数可以像push_back()和insert()一样向向量中添加元素,但是相较之下它有一个更高效的方法。

函数的定义如下:

template <class... Args> 
iterator emplace (const_iterator position, Args&&... args);

参数说明:

  • position:元素将添加到的位置
  • Args... args:要插入的元素的构造参数

该函数将构造一个元素并将其插入向量中指定位置的下一个位置。由于在插入元素时,无需使用中间对象,我们可以避免在拷贝和移动操作中进行额外的内存分配和释放,这使得emplace()成为一个很棒的选项。

使用emplace()函数

让我们看看一个示例,使用emplace()函数在向量中添加元素:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // 创建一个向量
    vector<int> vec = {1, 2, 3, 4, 5};

    // 向向量中的第3个位置插入元素6
    vec.emplace(vec.begin() + 2, 6);

    // 显示向量的元素
    for (auto i : vec)
        cout << i << " ";
    cout << endl;

    return 0;
}

输出:

1 2 6 3 4 5 

在上面的示例中,向量中的第3个位置之后插入了元素6。请注意,我们使用了std :: begin()函数将位置转换为迭代器。

我们还可以使用emplace()函数在向量的结尾添加元素,如下所示:

// 向向量的结尾添加元素7
vec.emplace_back(7);
emplace()函数和其他函数的比较

与构造对象和调用push_back()和insert()函数相比,使用emplace()函数插入新的元素更具有效性。emplace()函数采用构造参数,直接在容器中构建元素。在其他情况下,在调用push_back()和insert()函数时,将在堆上分配新对象所需的额外内存,这对性能产生了负面影响。

结论

以上是C++ STL中的向量emplace()函数的介绍。该函数可用于构造一个新元素并将其插入向量中的指定位置。这比使用push_back()和insert()函数更具有效性,因为在插入元素时,不需要使用中间对象。使用emplace()函数可以提高性能并且更加方便。