push_back vs emplace_back: 区别与选择(C++)
大家好!我最近开始学习C++11,遇到了std::vector的emplace_back方法。以前我一直用push_back添加元素,但现在看到有了替代方案。我读了几篇文章,但还是没完全理解根本区别。
下面是我写的一个简单测试示例:
```cpp
#include
#include
struct Person {
std::string name;
int age;
Person(const std::string& n, int a) : name(n), age(a) {}
};
int main() {
std::vector people;
// 方式1: push_back
people.push_back(Person("Alice", 30));
// 方式2: emplace_back
people.emplace_back("Bob", 25);
}
```
两种方式都能工作,但我注意到emplace_back直接接受构造函数参数,而push_back需要临时对象。看起来emplace_back更方便,但到处都说push_back仍然有用。
我的问题:
1. 什么时候emplace_back真的比push_back更高效?