std::ranges::subrange<I,S,K>::next
[[nodiscard]] constexpr subrange next(std::iter_difference_t<I> n = 1) const&
requires std::forward_iterator<I>;
| (1) | (с C++20) |
[[nodiscard]] constexpr subrange next(std::iter_difference_t<I> n = 1) &&; | (2) | (с C++20) |
1) Получает
subrange с итератором, увеличенным на min(n, size()) раз или уменьшенным на -n раз по отношению к итератору *this, если n >= 0 или n < 0 соответственно. Эквивалентно auto tmp = *this; tmp.advance(n); return tmp;.
2) Увеличивает сохранённый итератор на
min(n, size()) раз или уменьшает его на -n раз, если n >= 0 или n < 0 соответственно, а затем перемещающую конструкцию результата из *this. Эквивалентно advance(n); return std::move(*this);. Поведение не определено, если:
-
Iне моделирует двунаправленный итератор иn < 0, или - сохранённый итератор уменьшается после того, как становится недопустимым для уменьшения.
Параметр
| n | - | количество максимальных увеличений итератора |
Возвращаемое значение
subrange с итератором, увеличенным на min(n, size()) раз или уменьшенным на -n раз по отношению к исходному значению итератора *this, если n >= 0 или n < 0 соответственно.
Сложность
В общем случае min(n, size()) увеличений или -n уменьшений итератора, если n >= 0 или n < 0 соответственно.
Постоянная, если I моделирует случайный доступный итератор, и либо n < 0 либо std::sized_sentinel_for<S, I> моделируются.
Примечания
Вызов (2) может оставить *this в допустимом, но неопределённом состоянии, в зависимости от поведения перемещающей конструктор I и S.
Пример
См. также
|
(C++20) | получает копию subrange с уменьшенным итератором на заданное расстояние (публичный член-функция) |
|
(C++20) | передвигает итератор на заданное расстояние (публичный член-функция) |
|
(C++11) | инкрементирование итератора (шаблон функции) |
|
(C++20) | инкрементирует итератор на заданное расстояние или до границы (niebloid) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/subrange/next