提问者:小点点

有没有更简单的方法从后面迭代一个向量? [副本]


所以,通常我会这样迭代:

for(int i{ n - 1 }; i >= 0; --i)

或者像这样:

for(size_t{v.size()-1}; i >= 0; --i)
    if(i > v.size()) break;

或者说:

for(int* i{ &v.back() }; i >= &v.front(); --i)

但是有没有更简单/更快的方法去做那件事呢?

顺便说一句,代码如下:

int n;
cin >> n;
vector<int> v(n);
for (auto& e : v)
    cin >> e;
int min = INT_MAX;
int count{};
for (int* i{ &v.back() }; i >= &v.front(); i--) {
    if (*i > min) count++;
        min = ::min(min, *i);
}

共1个答案

匿名用户

在C++20中,最简单的方法是使用reverse_view,如下所示:

for (int i : std::ranges::reverse_view{v})
    // ...

这与基于索引的循环或从rbeginrend的迭代一样有效。