gpt4 book ai didi

c++ - 向后迭代

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:16 32 4
gpt4 key购买 nike

假设我有一个 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com