push_back()和emplace_back()的区别

在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才用的,所以在一些要兼顾旧版本代码中,应使用后者

上一篇:C数据类型


下一篇:leetcode 找出字符串所有字母异位词 中等