C++ push_back vs Insert vs emplace

标签 c++ vector insert push-back

我目前正在使用 C++ 使用 vector 制作一个应用程序。

我知道预优化是万恶之源。

但我真的忍不住好奇。

我正在将其他 vector 的一部分添加到另一个 vector 中。
我们会说 vector 的大小永远不会改变 300。

因为我总是追加到 vector 的末尾

这样做是否更快:
a.reserve(300);
a.insert(a.end(), b.begin(), b.end());

或者使用 push_backemplace 循环遍历我想附加并单独添加每个项目(同时仍然预先保留)的 vector 会更快吗? (不确定哪个更快)

谁能帮我解决这个问题?

最佳答案

这是一个一般原则:当一个库同时提供 do_x_oncedo_x_in_batch 时,后者应该至少与调用 do_x_once 一样快在一个简单的循环中。如果不是,则该库的实现非常糟糕,因为一个简单的循环就足以获得更快的版本。通常,此类批处理函数/方法可以执行额外的优化,因为它们具有数据结构内部知识。

因此,insert 应该至少和循环中的 push_back 一样快。在这种特殊情况下,insert 的智能实现可以为您要插入的所有元素执行单个 reservepush_back 每次都必须检查 vector 的容量。不要试图智胜图书馆 :)

关于C++ push_back vs Insert vs emplace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15009442/

相关文章:

java - 口译员会出错吗?

c++ - 如何在 C++ 中释放内存

c++ - 如何在 C++ 中过滤字符串 vector ?

mysql - 组合到过程中的语句

php - mysql查询INSERT INTO和SET问题

c++ - 继承自定义类的 std::vector::iterator?

c++ - 是否有像 docco 这样的 C/C++ 源代码文档生成器?

删除时出现 C++ 内存错误 - 调试断言失败

ios - 需要帮助说明有关法向矢量SceneKit

haskell - 函数中的非穷尽模式-Haskell