C++ std :: vector emplace vs insert

Adi*_*hag 44 c++ stl vector

我想知道两者之间有什么不同.我注意到emplace是c ++ 11的补充.那为什么要加?

jua*_*nza 124

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));
Run Code Online (Sandbox Code Playgroud)

  • 虽然这个问题被标记为重复,但这个答案比“原始”的答案更好地为我澄清了事情。 (9认同)

hat*_*ine 39

insert 将对象复制到向量中.

emplace 在矢量中构造它们.

  • 值得一提的是,如果使用右值转换,插入可能会移动,但它可能不会.因此,Scott Meyer建议尽可能使用emplace以提高性能. (13认同)
  • 请注意,在C++ 11中``insert`不必复制,它也可以移动. (9认同)