对不起,如果这个问题太简单了。
事先进行错误检查可确保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()
在"此处的一些代码"中浏览列表中的对象。