【发布时间】:2014-05-05 09:32:10
【问题描述】:
有没有一种有效的方法让单个 iterator 迭代 2 个对象 vector 的串联,就好像它们是一个对象一样?
这两个向量当然包含相同的数据类型。
更新:
我认为我应该提供更多关于我的问题和背景的细节。这可能会回答一些问题:
事实上,我有一个属性来存储该迭代器的最后一个位置,并且在一个方法中,我从上一次调用中停止的最后一个位置开始迭代,这可能在第一个向量中或在第二个向量中.
【问题讨论】:
-
当您到达
end时,第一个将迭代器设置为begin?或者创建包含所有前两个向量的第三个向量。 -
也许将两个向量都填充到您自己的“容器”对象中,并编写您自己的自定义迭代器来枚举它们,方法是在一个(或另一个)中保存一个迭代器以及指示 哪个一个。警告,如果你对迭代器标签进行完全随机访问,事情可能会变得……很忙。
-
Keil 解决方案的问题在于条件表达式。比较 来自不同容器 的两个迭代器可能“有效”,但它的 UB。来自 A 的迭代器不能合法地与来自 B 的迭代器进行比较,即使是 B.end()。它可能“有效”(可能适用于矢量),但不是因为标准支持它。
-
@WhozCraig 我不明白你为什么说是 UB,因为 vectorA 和 vectorB 都是 vector
并且迭代器应该兼容。我在发布之前测试了代码并且没问题,但是如果我忽略了什么请告诉我,我总是愿意学习:) -
@KeillRandor 这不是类型的东西(显然它们是相同的type)。这是一个范围的事情。 C++11 24.2.1p6 和 C++11 24.2.1p7 指的是我所关注的内容,虽然在这里发布的时间太长,但它的关键是序列的迭代器仅与其他“可达”的值可比same 序列的迭代器。您的循环想法非常好;只是一点点按摩(something like this)。这似乎有点奇怪,但它完全符合标准。