c++ - 迭代器或 reverse_iterator 的一个变量?

标签 c++ for-loop iterator stdvector reverse-iterator

<分区>

我想在 for 循环中迭代一些 std::vector,但根据某些条件, vector 应该向前或向后迭代。我想,我可以通过使用普通迭代器或像这样的反向迭代器轻松地做到这一点:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec{0, 1, 2, 3, 5, 6, 7};
    bool reverse = true;
    std::iterator<random_access_iterator_tag, int> it, end_it;

    if (reverse) {
      it = vec.rbegin();
      end_it = vec.rend();
    } else {
      it = vec.begin();
      end_it = vec.end();
    }

    for (; it != end_it; it++) {
        cout << *it << ", ";
    }
    return 0;
}

但不幸的是 vector::begin()vector::rbegin() 似乎没有使用相同的父类。有没有另一种方法可以做我想做的事,而无需在 if-else-结构中有两个不同的循环?当然,我可以为循环体创建一个函数/lambda 或使用一些索引算法,但有没有更优雅的方法?

编译器提示赋值 it = vec.begin() 因为它们是不同的类型。 gcc 和 VC++ 输出不同的错误并且似乎对 vector::begin 的返回值使用不同的类型。

最佳答案

不确定是否更好,你会接受没有 std::iterator 的解决方案,但我认为这稍微更优雅:

#include <iostream>
#include <vector>

using namespace std;

int main() {
vector<int> vec{0, 1, 2, 3, 4, 5, 6};
bool reverse = true;

for(int i: vec){
    if(reverse) 
        cout << vec[vec.size()-i] << endl;
    else 
        cout << vec[i] << endl;
  }
}

虽然效率不高,因为您必须在每个循环中检查是否。

关于c++ - 迭代器或 reverse_iterator 的一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51544910/

相关文章:

c++ - Qpushbutton 未显示

c++ - Visual Studio 2008 下的虚假 C++ 析构函数调用(在 GCC 下不存在)

c - for 循环内的 for 循环

c++ - 为什么在从控制台编译后取消引用 string::iterator 不会在 .end() 处引发错误?

c++ - 单例中的全局对象

c++ - 用 `using` 定义的类型的前向声明

r - 如何使嵌套 for 循环更高效并与 apply 一起使用

java - 将新元素插入字节数组

c++ - 读取二进制文件并正确使用流迭代器

python - 迭代 Python3 map 的最快方法