sort (arr, arr n)
Why do we write arr n in sort function in (function in algorithm library) C . What does it mean arr n?
CodePudding user response:
std::sortaccepts iterators to beginning and end of some range (end points to first element beyond range).- A pointer can be an iterator
- In
Can array of typesometype[n]decays to a pointer of type:sometype*. Soarris treated as a pointer andarr nadvances this pointer bynelements (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);
CodePudding user response:
std::sort takes a pair of iterators and them uses std::swap to sort the elements in that range.
The iterators must provide implementations for operator* and operator . These requirements are defined as "named requirements" here.
If you thing about it, any pointer fulfills these criteria.
In other words, you can think of iterators as a generalization of pointers. By passing a pointer to the first &arr[0] and a pointer to one past the last element &arr[n] you are providing the begin and end iterators. arr and arr n are fancy abbreviations for &arr[0] and &arr[n].
CodePudding user response:
Given the declaration of type arr[], the expression arr n is evaluated as the address of the nth element in arr.
In other words (hoping that it helps clarifying), arr n is equivalent to &arr[n].
