6

对不起,如果这是一个太简单的问题。

事先错误检查确保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

4 回答 4

9

for如果无条件地发生增量,我更喜欢使用:

for(; it1 != l1.end() && it2 != l2.end(); ++it1, ++it2)
{
    //run some code
}

当列表的大小相同时,您可以省略一项测试,但我不确定运行一些代码时发生了什么!

于 2013-11-12T15:54:22.363 回答
1

以您的方式执行此操作是合理的,您可以采取其他一些方法来最大程度地减少正在执行的检查数量:

如果您已经检查了两个长度是否相等(如先前检查所述),则标准 for 循环可能就足够了,它消除了对两个变量的访问并且仅依赖于一个变量的增量:

for (int i = 0; i< l1.size();i++)
{
    // run some code here
}

但是,您需要在“此处的一些代码”中使用advance()next()遍历列表中的对象。

于 2013-11-12T16:20:28.720 回答
1

如果您要对每对对象进行简单操作,则可以使用std::transform.

于 2013-11-12T15:54:21.677 回答
1

我认为这是完全合理的(除了我会使用前增量而不是后增量)。

您可以考虑使用某种“zip 迭代器”,但在这种情况下,这并不完全值得麻烦。

于 2013-11-12T15:52:14.430 回答