【问题标题】:C++ std::vector emplace vs insert [duplicate]C++ std::vector emplace vs insert [重复]
【发布时间】:2013-01-25 03:28:59
【问题描述】:

我想知道两者之间有什么区别。我注意到 emplace 是 c++11 添加的。那为什么要加呢?

【问题讨论】:

    标签: c++ vector stl


    【解决方案1】:

    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));
    

    【讨论】:

    • 虽然问题被标记为重复,但这个答案比“原始”的答案更能说明问题。
    【解决方案2】:

    insert 将对象复制到向量中。

    emplace在向量内部构造它们。

    【讨论】:

    • 注意在C++11中insert不必复制,也可以移动。
    • 值得一提的是,如果使用右值强制转换,插入可能会移动,但可能不会。因此,Scott Meyer 建议尽可能使用 emplace 以提高性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多