vector emplace_back和emplace
时间: 2024-10-25 07:14:20 浏览: 15
C++ 中”emplace_back” 与 “push_back” 的区别
`std::vector` 是 C++ 标准库中的动态数组,提供了一种高效的方式来存储和管理同类型的数据。`emplace_back()` 和 `emplace` 都是向 `vector` 的末尾添加元素的方法,它们的主要区别在于灵活性和效率。
`emplace_back()` 是一种便捷的插入操作,它直接在内存中构造新的元素并将其添加到容器尾部,无需创建临时拷贝。这个函数接受模板参数和对应的初始化参数,适合于已知类型并且可以直接通过参数列表构建的对象。例如:
```cpp
std::vector<int> vec;
vec.emplace_back(5); // 直接在尾部添加整数5,不会创建临时int对象
```
`emplace`, 另一方面,是一个更通用的版本,允许你在指定位置插入已经存在的对象,并支持成员初始值列表(Member Initializer Lists)。这意味着你可以传递现有的对象引用或指针,并允许对新插入对象的部分成员进行初始化。语法类似于这样:
```cpp
void func(std::pair<int, char>& pair) {
std::vector<std::pair<int, char>> vec;
vec.emplace(vec.size(), pair); // 在尾部添加一个新pair,部分初始化
}
```
总的来说,`emplace_back()` 更加简洁,适用于简单的新建对象,而 `emplace` 提供了更大的灵活性,可以用于需要部分初始化的对象。
阅读全文