同时迭代两个std :: lists

时间:2013-11-12 15:44:08

标签: c++ iterator std

很抱歉,这个问题太简单了。

先前的错误检查可确保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++;
}

这是一种合理的方法,还是有更优雅的解决方案?谢谢你的帮助。

4 个答案:

答案 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()在“此处的某些代码”中遍历列表中的对象。