首页 > 其他 > 详细

push_back()和emplace_back()的区别

时间:2021-08-17 23:08:44      阅读:39      评论:0      收藏:0      [点我收藏+]

在C++中,向vector后面添加元素有两个方法,一个是push_back(),另一个就是emplace_back(),那么同样的功能为什么有两个方法呢?

我们来测试一下:

class Int{
public:
    Int(int x) : x(x) {
        cout << "构造函数"<<endl;
    }

    Int(Int && other) : x(other.x) {
        cout << "移动构造函数"<<endl;
    }

    Int(const Int &other) : x(other.x) {
        cout << "拷贝构造函数"<<endl;
    }

private:
    int x;
};


int main(int argc, char const *argv[])
{
    vector<Int> values1;
    vector<Int> values2;
    cout << "push_back: "<<endl;
    cout<<"第一次"<<endl;
    values1.push_back(1);
    cout<<"第二次"<<endl;
    values1.push_back(2);
    cout << "emplace_back: "<<endl;
    cout<<"第一次"<<endl;
    values2.emplace_back(1);
    cout<<"第二次"<<endl;
    values2.emplace_back(2);
    return 0;
}

输出:

push_back: 
第一次
构造函数
移动构造函数
第二次
构造函数
移动构造函数
拷贝构造函数
emplace_back:
第一次
构造函数
第二次
构造函数
拷贝构造函数

可知,emplace_back()效率要比push_back()高,所以我们平时尽量用前者,但emplace_back()是C++11才用的,所以在一些要兼顾旧版本代码中,应使用后者

push_back()和emplace_back()的区别

原文:https://www.cnblogs.com/bytepro/p/pushback.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!