C++ 向量的单个迭代器
有没有一种有效的方法可以让一个C++ 向量的单个迭代器,c++,vector,stl,iterator,C++,Vector,Stl,Iterator,有没有一种有效的方法可以让一个迭代器对两个对象向量的串联进行迭代,就好像它们是一个 当然,这两个向量包含相同的数据类型 更新: 我想我应该把我的问题和我的背景说得更详细一些。这可能会回答一些问题: 事实上,我有一个属性存储迭代器的最后一个位置,在一个方法中,我从上次调用中停止的最后一个位置开始迭代,可能在第一个向量中,也可能在第二个向量中。这个解决方案怎么样?它可能不优雅,但我想它尊重标准。对吧? vector<Whatever>::iterator it = vectorA.beg
迭代器
对两个对象向量
的串联进行迭代,就好像它们是一个
当然,这两个向量包含相同的数据类型
更新:
我想我应该把我的问题和我的背景说得更详细一些。这可能会回答一些问题:
事实上,我有一个属性存储迭代器的最后一个位置,在一个方法中,我从上次调用中停止的最后一个位置开始迭代,可能在第一个向量中,也可能在第二个向量中。这个解决方案怎么样?它可能不优雅,但我想它尊重标准。对吧?
vector<Whatever>::iterator it = vectorA.begin();
bool loopOnVectorA = true;
while(true) {
// My stuff here
if (loopOnVectorA && it == vectorA.end())
{
it = vectorB.begin();
loopOnVectorA = false;
}
else if (it == vectorB.end())
{
break;
}
else
{
varPtrIt++;
}
}
vector::iterator it=vectorA.begin();
bool loopOnVectorA=true;
while(true){
//我的东西在这里
if(loopOnVectorA&&it==vectorA.end())
{
it=vectorB.begin();
loopOnVectorA=false;
}
else if(it==vectorB.end())
{
打破
}
其他的
{
varPtrIt++;
}
}
当第一个到达结束
时,另一个将迭代器设置为开始
?或者创建一个包含前两个向量的第三个向量。可以将这两个向量填充到您自己的“容器”对象中,并编写您自己的自定义迭代器,通过在其中一个(或另一个)中保存迭代器以及指示哪一个的提示来枚举它们。警告,事情可能会变得。。。忙碌的如果对迭代器标记进行完全随机访问,Keil解决方案的问题是条件表达式。比较来自不同容器的两个迭代器可能会“起作用”,但其效果并不理想。A中的迭代器不能与B中的迭代器进行合法比较,即使是B.end()。它可能“起作用”,但不是因为标准支持它。@WhozCraig我不明白你为什么说它是UB,因为vectorA和vectorB都是向量,迭代器应该兼容。我在发布之前测试了代码,结果还可以,但是如果我忽略了什么,请告诉我,我总是愿意学习:)@KeillRandor这不是类型问题(显然它们是同一类型的)。这是一个范围的事情。C++11 24.2.1p6和C++11 24.2.1p7涉及到我所关注的内容,虽然太长,无法在这里发布,但它的关键是序列的迭代器的值只能与相同序列的其他“可到达”迭代器进行比较。你的循环想法很好;只是稍微按摩一下()。这似乎有点奇怪,但它符合标准。它不会编译-,而。如果你想要一个审查,制作一个工作(最好是可编译的)代码,然后转到代码审查,他们很擅长分辨工作代码中的好和坏。