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::sort
accepts iterators to beginning and end of some range (end points to first element beyond range).- A pointer can be an iterator
- In
C
an array of typesometype[n]
decays to a pointer of type:sometype*
. Soarr
is treated as a pointer andarr n
advances this pointer byn
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);
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 n
th element in arr
.
In other words (hoping that it helps clarifying), arr n
is equivalent to &arr[n]
.