0

So, normally I'd iterate this way:

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

or like that:

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

or that:

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

But is there an easier/faster way to do that?

Here's the code, btw:

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);
}
anastaciu
  • 23,467
  • 7
  • 28
  • 53

1 Answers1

1

From c++20, the easiest way to do this is with reverse_view like this:

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

which is as efficient as an index based loop or iterating from rbegin to rend.

cigien
  • 57,834
  • 11
  • 73
  • 112