假设我有一个 vector<int> myvec
我想反向循环遍历所有元素。我可以想到几种方法:
for (vector<int>::iterator it = myvec.end() - 1; it >= myvec.begin(); --it)
{
// do stuff here
}
for (vector<int>::reverse_iterator rit = myvec.rbegin(); rit != myvec.rend(); ++rit)
{
// do stuff here
}
for (int i = myvec.size() - 1; i >= 0; --i)
{
// do stuff here
}
所以我的问题是什么时候应该使用它们?有区别吗?我知道第一个很危险,因为如果我传入一个空 vector ,那么 myvec.end() - 1
是未定义的,但这是否有任何其他危险或效率低下?
最佳答案
reverse_iterator
版本显示意图并适用于所有容器,无论其内容如何。
第一个存在您描述的缺陷。它还使用 >=
,这不适用于非随机访问迭代器。
第三个问题是i
是一个 int
.它不能容纳size()
那么多可能会回来。使其无符号工作( vector<int>::size_type
),但我们遇到了与解决方案一相同的问题。 ( 0U - 1
-> Funky terminating checks
-> :|
)
关于c++ - 向后迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548914/