在 C++11 及以后的标准中,std::vector 提供了 emplace_back 方法,用于直接在容器尾部构造元素,避免不必要的拷贝或移动操作。
答案:当然可以!
emplace_back 正是为 std::vector(以及其他支持的容器)设计的成员函数,专门用于在尾部“就地构造”对象。
基本用法示例
#include <vector>
#include <iostream>
struct Point {
int x, y;
Point(int x, int y) : x(x), y(y) {
std::cout << "Point constructed\n";
}
};
int main() {
std::vector<Point> points;
points.emplace_back(10, 20); // 直接在 vector 内存中构造 Point(10, 20)
return 0;
}
与 push_back 的区别
- push_back:先构造一个临时对象,再将其拷贝或移动到容器中。
- emplace_back:将参数转发给构造函数,在容器分配的内存中直接构造对象,效率更高。
适用场景
当你需要向 vector 添加复杂对象(如自定义类、不可复制对象等)时,优先使用 emplace_back 可提升性能并简化代码。
注意事项
- 确保传入的参数能匹配目标类型的某个构造函数。
- 对于简单类型(如
int、double),push_back和emplace_back性能差异可忽略。