1.当直接把构造好的元素放入数组时不能直接使用前者:
vector<vector<int>> v;
v.push_back({1,2,3}); // OK
v.emplace_back({1,2,3}); // error:no matching member function for call to 'emplace_back'
v.emplace_back(vector<int>{1,2,3}); // OK
v.emplace_back<vector<int>>({1,2,3}); // OK
2.emplace_back不一定比push_back高效:
得从底层分析:(来自:C++ STL vector添加元素(push_back()和emplace_back())详解)
emplace_back向容器中添加元素的步骤:
找到容器尾部->调用构造函数;
push_back向容器中添加元素的步骤:
若元素需要被构造->调用构造函数->找到容器尾部->调用移动构造函数;
若元素已经构造完成->找到容器尾部->调用移动构造函数;
ps:移动构造函数和拷贝构造函数不太理解,在这里都用移动构造函数表示将元素移动到容器尾部
从以上分析可以看出,无论元素是否已经构造完成,em