【发布时间】:2015-10-19 05:30:42
【问题描述】:
我正在尝试将emplace_back 转换为std::vector<std::map<int, int>>,但找不到正确的语法。
#include<map>
#include<vector>
int main()
{
std::vector<std::map<int, int>> v;
std::map<int,int> a {{1,2}};
v.push_back({{1,2}});
v.emplace_back({1,2}); // error
v.emplace_back({{1,2}}); // error
v.emplace_back(({1,2})); // error
}
push_back 在这里有效,但emplace_back 无效。我怎样才能让emplace_back 工作?
【问题讨论】:
-
没有。只使用大括号和圆括号
-
我相信我们不会将构造对象传递给 emplace_back。
-
有
v.emplace_back( std::map<int, int>{{1,2}} );..当然不理想 -
@M.M :这失去了 emplace_back 的优势,因此等同于 push_back
-
@GautamJha :你可以将一个构造对象传递给emplace_back,然后它使用添加对象的复制或移动构造函数,这最终相当于使用push_back