C++中的std::vector emplace和insert的区别

73

我想知道它们之间的区别。 我注意到emplace是C ++ 11的补充。 所以为什么要补充?

2个回答

172

Emplace需要传递构造对象所需的参数以原地构造对象,而insert则需要(引用)一个对象。

struct Foo
{
  Foo(int n, double x);
};

std::vector<Foo> v;
v.emplace(someIterator, 42, 3.1416);
v.insert(someIterator, Foo(42, 3.1416));

19
尽管这个问题被标记为重复,但是这个答案比“原始问题”的回答更好地澄清了我的疑惑。 - JHBonarius

53

insert将对象复制到向量中。

emplace在向量内部构造它们。


16
请注意,在C++11中,“insert”不一定需要复制,也可以移动。 - juanchopanza
19
值得一提的是,如果使用右值引用转换,插入操作可能会移动元素位置,但也可能不会。因此,Scott Meyer建议在性能和代码清晰度方面尽可能使用emplace。 - jeremyong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接