c – 我可以使用always emplace替换插入单个元素吗?
发布时间:2020-12-16 05:00:49 所属栏目:百科 来源:网络整理
导读:我想知道在将单个元素插入STL容器(如set,unordered_set)时是否始终使用emplace替换insert是否可行? 从签名中,emplace更简单,不涉及重载.是否有任何问题停止使用插入并始终使用emplace? 注意:有一些问题询问了emplace和insert / push_back等之间的区别(例
我想知道在将单个元素插入STL容器(如set,unordered_set)时是否始终使用emplace替换insert是否可行?
从签名中,emplace更简单,不涉及重载.是否有任何问题停止使用插入并始终使用emplace? 注意:有一些问题询问了emplace和insert / push_back等之间的区别(例如here,here和here)我理解其中的区别,在我看来,emplace在各方面都更好.我只想确认是否可以弃用插入. 解决方法
有一些示例
here可以适用于安置和插入,显示行为可能不同的时间.
这些例子可能看起来有点人为,所以我会给出一个希望看起来不那么简单的例子: #include <set> template <typename T> T id(T x) { return x; } int main() { std::set<int(*)(int)> s; s.insert(id); // OK s.emplace(id); // error s.emplace(id<int>); // OK } insert可以推导出id的模板参数,因为它知道它想要什么类型.对于emplace,除非您明确指定,否则会收到错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |