我习惯这样写循环:
for (std::size_t index = 0; index < foo.size(); index++)
{
// Do stuff with foo[index].
}
但是当我看到别人代码中的迭代器循环时,它们看起来像这样:
for (Foo::Iterator iterator = foo.begin(); iterator != foo.end(); iterator++)
{
// Do stuff with *Iterator.
}
我发现 iterator != foo.end()
这种写法让人望而生畏。如果 iterator
被增加了超过一次,这样写还可能很危险。
使用 iterator < foo.end()
这种方式似乎更为"正确",但我在实际的代码中从未见过。为什么呢?
end()
指向序列中最后一个对象的下一个位置,因此尝试对其进行解引用操作时会出现错误。这也是为什么可以安全地使用iter != sequence.end()
来判断是否遍历完整个序列,而不必担心遗漏最后一个元素。 - zneakend
之后都是未定义的行为。 - Billy ONeal