所以,通常我会这样迭代:
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);
}
在C++20中,最简单的方法是使用reverse_view
,如下所示:
for (int i : std::ranges::reverse_view{v})
// ...
这与基于索引的循环或从rbegin
到rend
的迭代一样有效。