Namespaces
Variants

std::ranges::join_with_view<V,Pattern>::iterator<Const>::iterator

来自 zh.cppreference.net
 
 
范围库
范围适配器
 
 
/*iterator*/() = default;
(1) (C++23 起)
constexpr /*iterator*/( /*iterator*/<!Const> i )
    requires Const &&
        std::convertible_to<ranges::iterator_t<V>, /*OuterIter*/> &&
        std::convertible_to<ranges::iterator_t</*InnerRng*/>,
                            /*InnerIter*/> &&
        std::convertible_to<ranges::iterator_t<Pattern>, /*PatternIter*/>;
(2) (C++23 起)
constexpr /*iterator*/( /*Parent*/& parent, /*OuterIter*/ outer )
    requires std::forward_range</*Base*/>;
(3) (C++23 起)
(仅用于阐述*)
constexpr explicit /*iterator*/( /*Parent*/ parent )
    requires (!std::forward_range</*Base*/>);
(4) (C++23 起)
(仅用于阐述*)

构造迭代器。重载 (3,4) 由 ranges::join_with_view 的 begin() 和 end() 调用。

 重载  数据成员
parent_ outer_it_ inner_it_
(1) 以nullptr 值初始化
初始化(仅当 Base 满足 forward_range 时)
 默认初始化 
(2) 以i.parent_  以 std::move(i.outer_it_ 
初始化(仅当 Base 满足 forward_range 时)
(3) 以
 std::addressof(parent) 
以 std::move(outer)
初始化 不适用
2) 初始化数据成员后,等价于

if (i.inner_it_ .index() == 0)
    inner_it_ .template emplace<0>(std::get<0>(std::move(i.inner_it_ )));
else
    inner_it_ .template emplace<1>(std::get<1>(std::move(i.inner_it_ ))); 。

3,4) 初始化数据成员后,调整外层迭代器,如同内层迭代器已被 operator++() 递增。

参数

i - 可变迭代器
parent - std::ranges::join_with_view 对象
outer - 指向 parent 底层范围的迭代器

示例