很抱歉,这个问题太简单了。
先前的错误检查可确保l1.size() == l2.size()
。
std::list<object1>::iterator it1 = l1.begin();
std::list<object2>::iterator it2 = l2.begin();
while(it1 != l1.end() && it2 != l2.end()){
//run some code
it1++;
it2++;
}
这是一种合理的方法,还是有更优雅的解决方案?谢谢你的帮助。
答案 0 :(得分:8)
如果无条件地增加,我更喜欢使用for
:
for(; it1 != l1.end() && it2 != l2.end(); ++it1, ++it2)
{
//run some code
}
当列表大小相同时,您可以省略一个测试,但我不确定中运行某些代码会发生什么!
答案 1 :(得分:1)
我认为这是完全合理的(除了我使用预增量而不是后增量)。
您可以考虑使用某种类型的"zip iterator",但在这种情况下,这不值得麻烦。
答案 2 :(得分:1)
如果您对每对对象执行简单操作,则可以使用std::transform
。
答案 3 :(得分:1)
以你的方式做到这一点是合理的,你可以采取一些其他方法来尽量减少检查的数量:
如果你已经检查过两个长度相等(如前面的检查所述),循环标准就足够了,这就消除了两个变量的访问,并且只依赖于一个变量的增量:
for (int i = 0; i< l1.size();i++)
{
// run some code here
}
但是,您需要使用advance()
或next()
在“此处的某些代码”中遍历列表中的对象。