如果标题错误,请注意。我不确定如何在一行中描述我的问题。
假设我有多个类型为cv :: Point的向量,并且在每次迭代时我都要创建一个新的向量来保存其他2个向量的连接,这样做最有效的方法是什么?在下面的例子中,向量V4将保持向量V1和V2的元素,而V5将保持向量V4和V3。
我不想复制这些元素。如果我能得到一个指向V1和V2的迭代器会更好,因为矢量随着时间的推移变得非常大。
我是从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() );
答案 0 :(得分:2)
你可能想要考虑至少模糊地做一些像deque
通常实现的东西 - 本质上是向量的指针向量,它跟踪每个组件向量的边界,因此它可以找到合适的向量,调整包含所需元素的向量的索引。
根据具体情况,您可能还会考虑尝试保持组件向量的大小相等,以加快正确索引的计算速度。如果它们以非常不同的尺寸开始,这可能是不值得的,但如果它们接近相同,则可能值得将一些从一个移到另一个以均衡它们的尺寸。为了实现这一点,您需要在每个向量的开头留下一个最初未使用的部分,以便您可以快速轻松地将一些元素从一个元素移动到下一个元素的开头。