gpt4 book ai didi

C++ push_back vs Insert vs emplace

转载 作者:可可西里 更新时间:2023-11-01 15:49:21 32 4
gpt4 key购买 nike

我目前正在使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com