我习惯写这样的循环:
for (std::size_t index = 0; index < foo.size(); index++)
{
// Do stuff with foo[index].
}
Run Code Online (Sandbox Code Playgroud)
但是当我在其他代码中看到迭代器循环时,它们看起来像这样:
for (Foo::Iterator iterator = foo.begin(); iterator != foo.end(); iterator++)
{
// Do stuff with *Iterator.
}
Run Code Online (Sandbox Code Playgroud)
我发现这iterator != foo.end()是有争议的.如果iterator增加多于一个也可能是危险的.
使用起来似乎更"正确" iterator < foo.end(),但我从未在实际代码中看到过这种情况.为什么不?
我有一种情况,我正在通过矢量,行事:
std::vector::iterator iter = my_list.begin();
for ( ; iter != my_list.end(); ++iter )
{
if ( iter->doStuff() ) // returns true if successful, false o/w
{
// Keep going...
}
else
{
for ( ; iter != m_list.begin(); --iter ) // ...This won't work...
{
iter->undoStuff();
}
}
}
在正常情况下 - 假设一切顺利 - 我一路前进my_list.end()并成功结束循环.
但是,如果在我做某事时出现问题,我希望能够撤消所有内容 - 基本上将我的步骤回溯到向量的开头,一次一个地以相反的顺序撤消所有内容.
我的问题是,当我到达my_list.begin()- 如嵌套for循环中所示 - 我还没有完成,因为我仍然需要调用undoStuff()列表中的第一个元素.现在,我可以在循环之外进行最后的调用,但这看起来有点不洁净.
我看到它的方式,我只有在我到达时才会这样做my_list.rend().但是,我无法将std :: vector :: iterator与std :: vector :: reverse_iterator进行比较. …