5

如果我有课

class foo {
 public:
  foo() { // spend some time and do something. }
 private:
   // some data here
}

现在我有一个foo的向量,我想把这个向量放到另一个向量中

vector<foo> input; // assume it has 5 elements
vector<foo> output;

这两条线有什么性能差异吗?

output.push_back(input[0])
output.emplace_back(input[0])
4

1 回答 1

12

这两条线有什么性能差异吗?

不,两者都将使用复制构造函数初始化新元素。

emplace_back使用多于(或少于)一个参数进行构造时可能会带来好处:

output.push_back(foo{bar, wibble}); // Constructs and moves a temporary
output.emplace_back(bar, wibble);   // Initialises directly

真正的好处emplace不在于性能,而在于允许在容器中创建不可复制(在某些情况下是不可移动)元素。

于 2012-12-14T17:20:01.350 回答