Avatar ·

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更高效?