为什么使用'!='比'<'更好在向量循环中?(C ++)

时间:2009-05-16 04:07:27

标签: c++ vector loops

为什么使用'!='比'<'更好在矢量循环中?我只是看不出差异。

7 个答案:

答案 0 :(得分:22)

因为你正在使用迭代器,并且它会使循环看起来与其他容器完全相同,所以你应该选择切换到其他容器类型,例如set,list,unordered_set等,其中<没有意义。

答案 1 :(得分:8)

我认为您的意思是使用!=vector.end()而不是<vector.size(),因为您的问题并不明确。

更喜欢end()版本的一个原因是你真正想要做的是检查你是否到了最后。

在C中对数组进行这种检查的习惯用法是检查索引与大小的比较,但这是一种“遗留”行为。然后,在Java世界中传播(直到&lt; {{}}},直到人们意识到数组是邪恶的并且Java最终支持泛型。但是,在C ++中,当你有一个很好的集合类(如vector)时,没有理由使用这个习惯用法。它更具可读性,更易于维护。例如,它可以在必要时更容易切换到其他集合,因为您仍然在谈论结束。

答案 2 :(得分:6)

某些迭代器类型不支持less-than运算符 - 它们仅支持不等运算符。这就是为什么你经常会看到被忽略的运营商被抛弃的原因。

答案 3 :(得分:3)

一般来说,我喜欢将这样的代码放在类似于STL算法的模板函数中,这样它们就不知道底层的包含是什么。

因为&lt;只对矢量有意义,它不适合通用函数。如果您使用&lt;,则表明您正在使用向量。

答案 4 :(得分:2)

程序员可能记得一个防御性的编码技巧:如果在循环执行期间出现问题,并且索引/指针/迭代器越过末尾,循环将在检查'&lt;'时悄然停止让小虫不被注意。随着!=可能会出现混乱和崩溃,因为循环继续出现错误数据,从而允许更早的修复。

答案 5 :(得分:1)

对于矢量迭代器,它没有任何区别。通常,迭代器可能不支持'&lt;'只是'=='和'!='。因此,测试是否未到达集合末尾的最常用方法是检查迭代器是否!= container.end()

答案 6 :(得分:-1)

另一个原因:当转换为汇编时,分支相等或分支不相等通常比比较分支快