我需要从向量末尾向开头迭代。正确的方法是:
for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
//do Something
}
当//do Something
需要知道实际索引时,需要使用rit
进行一些计算来获取它,例如index = v.size() - 1 - (rit - v.rbegin)
如果无论如何都需要索引,我强烈建议使用该索引进行迭代。
for(int i = v.size() - 1; i >= 0; --i)
{
//do something with v[i] and i;
}
这会产生一个警告,指出 i
是有符号的,而 v.size()
是无符号的。
更改为
for(unsigned i = v.size() - 1; i >= 0; --i)
在功能上是错误的,因为这实质上是一个无限循环 :)
有什么美观的方式可以做到我想要做的事情,同时
- 没有警告
- 不涉及转换
- 不过度冗长
i != std::numeric_limits<unsigned>::max()
... 或者如果您认为太冗长,可以使用 UINT_MAX。 - smerlinfor (size_t i = v.size(); i --> 0; )
可以翻译为:从v
的大小开始循环,每次递减1直到0为止,循环过程中使用变量i
。 - UncleBens