c++ - 向后迭代

标签 c++ loops iterator

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

相关文章:

iterator - 仅删除符合条件的 Vec 的尾随元素

c++ - Dicom Toolkit (DCMTK) - 如何获取窗口中心和宽度

c++ - 对字符串数组进行排序会导致段错误

c - 基本时间复杂度?

java - 如何在 4 个独立线程完成后安排打印语句?

c++ - 为什么迭代器需要默认构造

c++ - 反向迭代流

C++动态数组初始化崩溃

c# - 将此 DLL 包含从 VB.net 翻译成 C#

JavaScript 将数据推送到数组