【发布时间】:2010-11-17 15:06:14
【问题描述】:
我需要遍历从结尾到开头的向量。 “正确”的方式是
for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
//do Something
}
当doSomething涉及知道实际索引时,则需要用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。 -
到目前为止,我认为做演员看起来是最干净的解决方案:-)
-
只需在 i 上设置一个上限,即 v.size()。
-
@Downvoter:您能解释一下否决票吗?这是一个精确的问题,感谢@Nim,我终于得到了答案。
-
for (size_t i = v.size(); i --> 0; )