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
/*distance-from*/( const Tuple& t ) const;
| (с 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 | - | кортеж итераторов, до которого нужно найти расстояние |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/cartesian_product_view/iterator/helpers