[C++] push_back和emplace_back区别

区别

  • push_back 接受一个参数,会直接调用该参数类型的构造函数来创建一个临时对象,然后将这个临时对象通过拷贝或移动存储到 vector 中。
  • emplace_back 接受的是可变数量的参数,它会直接在 vector 的内存空间上就地构造一个对象,而不需要临时对象。

实验

#include <iostream>
#include <vector>
class Tim
{
private:
    int num_;
public:
    Tim(int _num):num_(_num)
    {
        std::cout << "Tim constructor" << std::endl;
    }
    Tim(const Tim &_tim):num_(_tim.num_)
    {
        std::cout << "Tim copy constructor" << std::endl;
    }
    Tim(Tim &&_tim):num_(_tim.num_)
    {
        std::cout << "Tim move constructor" << std::endl;
    }
};

int main()
{
    std::vector<Tim> tim_vec_1;
    std::vector<Tim> tim_vec_2;
    std::cout << "<<<<<< push_back <<<<<<" << std::endl;
    tim_vec_1.push_back(1);
    std::cout << "<<<<<< emplace_back <<<<<<" << std::endl;
    tim_vec_2.emplace_back(2);
    return 0;
}

输出

<<<<<< push_back <<<<<<
Tim constructor
Tim move constructor
<<<<<< emplace_back <<<<<<
Tim constructor

已发布

分类

来自

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注