通过std :: array或std :: vector向后迭代的正确方法是什么?

时间:2019-12-28 14:30:51

标签: c++ loops

所以我这样做的基本思路是这种循环:

std::array<int,10> t{};
for (int k = t.size()-1; k >= 0; k--)
    cout << t[k] << " ";

问题是.size()方法返回一个std :: array :: size_type,根据我的阅读,该值可能大于一个int。

问题是size_type是无符号的,所以当我这样做时:

for (auto k = t.size()-1; k >= 0; k--)
    cout << t[k] << " ";

因为k不能为负数,所以它无限循环。那么如何使用size_type变量迭代std :: array或std :: vector backwars?

2 个答案:

答案 0 :(得分:7)

如果可以使用C ++ 11或更高版本,则可以/应该使用迭代器。这样的舒缓:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1,2,3,4,5};
    for(auto it = v.rbegin(); it != v.rend(); ++it) {
        std::cout << *it << '\n';
    }

    return 0;
}

实时示例here

答案 1 :(得分:6)

如果由于某种原因迭代器不起作用,并且由于某些原因您必须使用索引:

 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity=" ....