同时遍历两个 std::lists



对不起,如果这个问题太简单了。

事先进行错误检查可确保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++;
}

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

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

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

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

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

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

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

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

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

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

但是,您需要使用 advance()next() 在"此处的一些代码"中浏览列表中的对象。

最新更新