If the algorithm requires a range specified by bidirectional iterators firstand last, then it --lastmust be valid under the same conditions ++firstas, namely, that the range is not empty. The range is empty if and only if first == last.
, --last , , *--last .
, , ( ). prev, copy_backward, move_backward, reverse, reverse_copy, stable_partition, inplace_merge, [prev|next]_permutation.
, , , .
, end() . , --x , x r . , , , int *foo();, , --foo() . , , , end() , operator--, -, . , .
, :
auto last = --c.end();
.
auto last = c.end();
--last;
r, l.