C++ C++;标准::向量安放与插入

C++ C++;标准::向量安放与插入,c++,vector,stl,C++,Vector,Stl,我想知道这两者有什么不同。我注意到emplace是c++11的加法。那么为什么要添加呢?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)); structfoo { Foo(整数n,双x);

我想知道这两者有什么不同。我注意到emplace是c++11的加法。那么为什么要添加呢?

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));
structfoo
{
Foo(整数n,双x);
};
std::向量v;
v、 安放(someIterator,42,3.1416);
v、 插入(someterator,Foo(42,3.1416));

插入
将对象复制到向量中


emplace
在向量内部构造它们。

注意,在C++11
insert
中,它不必复制,也可以移动。值得一提的是,如果使用右值转换,insert可能会移动,但它可能不会移动。因此,Scott Meyer建议尽可能使用emplace,以确保性能清晰。尽管问题标记为重复,但这个答案对我来说比“原始”答案更清楚。