gpt4 book ai didi

c++ - "Merge" vector 指针

转载 作者:行者123 更新时间:2023-11-30 03:30:53 25 4
gpt4 key购买 nike

如果标题有误请见谅。我不确定如何用一行来描述我的问题。

假设我有多个 cv::Point 类型的 vector ,并且在每次迭代中我要创建一个新 vector 来保存其他 2 个 vector 的串联,这样做最有效的方法是什么?在下面的示例中, vector V4 将包含 vector V1 和 V2 的元素,而 V5 将包含 V4 和 V3。

我不想复制元素。如果我能得到一个指向 V1 和 V2 的迭代器会更好,因为这些 vector 会随着时间的推移变得非常大。

我已经从 What is the best way to concatenate two vectors? 试过了但我不确定是否有更快的选择。我也使用了 boost:join 函数,但它似乎慢得多。

理想情况下,此复制/移动操作是时间常数,因为整个应用程序都围绕着它进行。

AB.reserve( A.size() + B.size() ); // preallocate memory
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );

enter image description here

最佳答案

您可能想要考虑做一些事情,至少像通常实现的 deque 一样——本质上是一个指向 vector 的指针 vector ,它跟踪每个分量 vector 的边界,因此它可以找到合适的 vector ,调整包含所需元素的 vector 的索引。

根据情况,您还可以考虑尝试使分量 vector 的大小保持相等,以加快计算正确索引的速度。如果它们一开始的尺寸大相径庭,这可能不值得,但如果它们接近相同,则可能值得将一些从一个尺寸移到另一个尺寸以均衡它们的尺寸。为此,您需要在每个 vector 的开头保留一个最初未使用的部分,以便您可以快速轻松地将一些元素从一个 vector 移动到下一个 vector 的开头。

关于c++ - "Merge" vector 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44643020/

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