5.1 KiB
[range.iter.op.advance]
24 Iterators library [iterators]
24.4 Iterator primitives [iterator.primitives]
24.4.4 Range iterator operations [range.iter.ops]
24.4.4.2 ranges::advance [range.iter.op.advance]
template<[input_or_output_iterator](iterator.concept.iterator#concept:input_or_output_iterator "24.3.4.6 Concept input_or_output_iterator [iterator.concept.iterator]") I> constexpr void ranges::advance(I& i, iter_difference_t<I> n);
Preconditions: If I does not model bidirectional_iterator,n is not negative.
Effects:
-
If I models random_access_iterator, equivalent to i += n.
-
Otherwise, if n is non-negative, increments i by n.
-
Otherwise, decrements i by -n.
template<[input_or_output_iterator](iterator.concept.iterator#concept:input_or_output_iterator "24.3.4.6 Concept input_or_output_iterator [iterator.concept.iterator]") I, [sentinel_for](iterator.concept.sentinel#concept:sentinel_for "24.3.4.7 Concept sentinel_for [iterator.concept.sentinel]")<I> S> constexpr void ranges::advance(I& i, S bound);
Preconditions: Either assignable_from<I&, S> || sized_sentinel_for<S, I> is modeled, or [i, bound) denotes a range.
Effects:
-
If I and S model assignable_from<I&, S>, equivalent to i = std::move(bound).
-
Otherwise, if S and I model sized_sentinel_for<S, I>, equivalent to ranges::advance(i, bound - i).
-
Otherwise, while bool(i != bound) is true, increments i.
template<[input_or_output_iterator](iterator.concept.iterator#concept:input_or_output_iterator "24.3.4.6 Concept input_or_output_iterator [iterator.concept.iterator]") I, [sentinel_for](iterator.concept.sentinel#concept:sentinel_for "24.3.4.7 Concept sentinel_for [iterator.concept.sentinel]")<I> S> constexpr iter_difference_t<I> ranges::advance(I& i, iter_difference_t<I> n, S bound);
Preconditions: If n > 0, [i, bound) denotes a range.
If n == 0, [i, bound) or [bound, i) denotes a range.
If n < 0, [bound, i) denotes a range,I models bidirectional_iterator, andI and S model same_as<I, S>.
Effects:
-
If S and I model sized_sentinel_for<S, I>:
-
Otherwise,
Returns: n - M, where M is the difference between the ending and starting positions of i.