Why do we write arr + n in sort function?

Solution 1:

  1. std::sort accepts iterators to beginning and end of some range (end points to first element beyond range).
  2. A pointer can be an iterator
  3. In C an array of type sometype[n] decays to a pointer of type: sometype*. So arr is treated as a pointer and arr + n advances this pointer by n elements (so it point to first element beyond array).

Now alternative ways to write this code to make it more clear and less bug prone:

std::sort(std::begin(arr), std::end(arr));

// or using C++20 ranges:
std::ranges::sort(arr);