std::ranges::concat_view<Views...>::iterator<Const>::satisfy, prev, advance-fwd, advance-bwd
来自 cppreference.cn
                    
                                        
                    < cpp | ranges | concat view | iterator
                    
                                                            
                    以下仅用于说明的成员函数模板简化了描述。
每个辅助函数模板都有一个非类型模板参数,类型为 std::size_t。
- 如果模板参数的名称是 N,则模板实参始终是 it_.index()。
- 如果模板参数的名称是 I,则模板实参可以是 [0,sizeof...(Views))中的任何 std::size_t 值。
然而,模板实参可能不是编译时常量,因此 helper <non_const>(/* arguments */) 的实际效果类似于  if (non_const == 0)
     helper <0>(/* arguments */);
 else if (non_const == 1)
     helper <1>(/* arguments */);
 /* other indices */
 else if (non_const == (sizeof...(Views) - 1))
     helper <sizeof...(Views) - 1>(/* arguments */);
 。
| 目录 | 
[编辑] 辅助模板
小型辅助模板
| template< std::size_t N > constexpr auto /*get-iter*/(); | (1) | (仅作说明*) | 
| template< std::size_t I > constexpr auto /*get-view*/(); | (2) | (仅作说明*) | 
| template< std::size_t I > constexpr auto /*get-begin*/(); | (3) | (仅作说明*) | 
| template< std::size_t I > constexpr auto /*get-end*/(); | (4) | (仅作说明*) | 
| template< std::size_t N > constexpr auto /*to-underlying-diff-type*/( difference_type value ); | (5) | (仅作说明*) | 
小型辅助模板简化了主辅助模板和成员函数的描述。它们不包含在 C++ 标准文档中。
1) 获取 
it_ 中包含的底层迭代器。2) 获取父 
concat_view 中的第 I 个视图。3) 获取父 
concat_view 中第 I 个视图的起始迭代器。 返回 ranges::begin(
get-view <I>())。4) 获取父 
concat_view 中第 I 个视图的末尾迭代器或哨兵。 返回 ranges::end(
get-view <I>())。 返回 static_cast<std::iter_difference_t<std::variant_alternative_t<N,
 base-iter >>>(value)。
std::ranges::concat_view::iterator::satisfy<N>
| template< std::size_t N > constexpr void /*satisfy*/(); | (仅作说明*) | |
调整 it_ 的当前(全局)位置。
std::ranges::concat_view::iterator::prev<N>
| template< size_t N > constexpr void /*prev*/(); | (仅作说明*) | |
将 it_ 移动到前一个(全局)位置。
std::ranges::concat_view::iterator::advance-fwd<N>
| template< size_t N > constexpr void /*advance-fwd*/( difference_type offset, | (仅作说明*) | |
将当前(全局)位置向前推进 step 步。
- 如果 N 是 sizeof...(Views) - 1,等价于 get-iter<N>() +=to-underlying-diff-type(steps);。
- 否则,等价于 auto n_size = ranges::distance(get-view<N>()));
 if (offset + steps < n_size)get-iter<N>() +=to-underlying-diff-type(steps);
 else
 {it_.template emplace<N + 1>(get-begin<N + 1>());advance-fwd<N + 1>(0, offset + steps - n_size);
 }。
参数
| offset | - | 当前(全局)位置相对于 it_当前所指范围起始点的偏移量 | 
| steps | - | 向前推进的步数 | 
std::ranges::concat_view::iterator::advance-bwd<N>
| template< size_t N > constexpr void /*advance-bwd*/( difference_type offset, | (仅作说明*) | |
将当前(全局)位置向后推进 steps 步。
- 如果 N 是 0,等价于 get-iter<N>() -=to-underlying-diff-type(steps);。
- 否则,等价于 if (offset >= steps)get-iter<N>() -=to-underlying-diff-type(steps);
 else
 {get-view<N - 1>());it_.template emplace<N - 1>(get-end<N - 1>());advance-bwd<N - 1>(prev_size, steps - offset);
 }。
参数
| offset | - | 当前(全局)位置相对于 it_当前所指范围起始点的偏移量 | 
| steps | - | 向后推进的步数 | 


