std::ranges::cartesian_product_view<First, Vs...>:: iterator <Const>:: next , std::ranges::cartesian_product_view<First, Vs...>:: iterator <Const>:: prev , std::ranges::cartesian_product_view<First, Vs...>:: iterator <Const>:: distance_from
Содержание |
std::ranges::cartesian_product_view:: iterator :: next
|
template
<
std::
size_t
N
=
sizeof...
(
Vs
)
>
constexpr void /*next*/ ( ) ; |
(начиная с C++23)
( только для демонстрации* ) |
|
При вызове с параметром шаблона по умолчанию рекурсивно генерирует следующий элемент (кортеж итераторов) в
cartesian_product_view
.
Пусть
current_
обозначает базовый кортеж итераторов. Эквивалентно:
auto& it = std::get<N>(current_); ++it; if constexpr (N > 0) { if (it == ranges::end(std::get<N>(parent_->bases_))) { it = ranges::begin(std::get<N>(parent_->bases_)); next<N - 1>(); } }
Используется в следующих нестатических функциях-членах:
-
ranges
::
cartesian_product_view
::
operator+
std::ranges::cartesian_product_view:: iterator :: prev
|
template
<
std::
size_t
N
=
sizeof...
(
Vs
)
>
constexpr void /*prev*/ ( ) ; |
(начиная с C++23)
( только для демонстрации* ) |
|
При вызове с параметром шаблона по умолчанию рекурсивно генерирует предыдущий элемент (кортеж итераторов) в
cartesian_product_view
.
Пусть
current_
обозначает базовый кортеж итераторов. Эквивалентно:
auto& it = std::get<N>(current_); if constexpr (N > 0) { if (it == ranges::begin(std::get<N>(parent_->bases_))) { it = /*cartesian-common-arg-end*/(std::get<N>(parent_->bases_)); prev<N - 1>(); } } --it;
Используется в следующих нестатических функциях-членах:
-
ranges
::
cartesian_product_view
::
operator-
std::ranges::cartesian_product_view:: iterator :: distance_from
|
template
<
class
Tuple
>
constexpr
difference_type
|
(since C++23)
( только для демонстрации* ) |
|
Возвращает "расстояние" (т.е. количество "переходов") между двумя итераторами .
Пусть:
-
parent_будет указателем на базовыйcartesian_product_view -
/*scaled-size*/
(
N
)
будет:
- произведением static_cast < difference_type > ( ranges:: size ( std :: get < N > ( parent_ - > bases_ ) ) ) и /*scaled-size*/ ( N + 1 ) если N ≤ sizeof... ( Vs ) , иначе
- static_cast < difference_type > ( 1 ) ;
- /*scaled-distance*/ ( N ) будет произведением static_cast < difference_type > ( std :: get < N > ( current_ ) - std :: get < N > ( t ) ) и /*scaled-size*/ ( N + 1 ) ;
- /*scaled-sum*/ будет суммой /*scaled-distance*/ ( N ) для каждого целого числа 0 ≤ N ≤ sizeof... ( Vs ) .
Возвращает: /*scaled-sum*/ .
Поведение не определено, если
/*scaled-sum*/
не может быть представлено типом
difference_type
.
Используется в следующих функциях:
-
operator-( const /*iterator*/ & , const /*iterator*/ & ) -
operator-( const /*iterator*/ & , std:: default_sentinel_t )
Параметры
| t | - | кортеж итераторов, до которых нужно найти расстояние |