【发布时间】:2013-11-12 15:44:07
【问题描述】:
抱歉,这个问题太简单了。
之前的错误检查确保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++;
}
这是一种合理的方法,还是有更优雅的解决方案?感谢您的帮助。
【问题讨论】:
-
次要点:递增迭代器的常用习语使用前缀而不是后缀++。 IE。 ++它1;而不是 it1++;这与性能相关的原因不明。
-
还有一个小问题:如果 l1.size() == l2.size() 你只需要在 while 条件下进行一次测试。
-
@DaleWilson:这并不是那么晦涩难懂。这只是后增量运算符所需的复杂(不是数学意义上的)类型所产生的复制构造开销。
-
@TomSwifty:这真的取决于你要增加什么。
operator++()应该返回T&,而operator++(int)返回T。但是,考虑到返回值优化、移动语义等等,我不确定它是否真的会给当今的编译器带来问题。 -
它用于给定对象类型的迭代器。原因是后增量会创建一个副本,对其进行增量,然后返回原始值。贵的是副本。