Namespaces
Variants

std::ranges::join_with_view<V,Pattern>:: iterator <Const>:: operator++,--

From cppreference.net
Ranges library
Range adaptors
constexpr /*iterator*/ & operator ++ ( ) ;
(1) (自 C++23 起)
constexpr void operator ++ ( int ) ;
(2) (自 C++23 起)
constexpr /*iterator*/ operator ++ ( int )

requires std:: is_reference_v < /*InnerBase*/ > &&
ranges:: forward_range < /*Base*/ > &&

ranges:: forward_range < /*InnerBase*/ > ;
(3) (自 C++23 起)
constexpr /*iterator*/ & operator -- ( )

requires std:: is_reference_v < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*Base*/ > &&
ranges:: bidirectional_range < /*InnerBase*/ > &&
ranges:: common_range < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*PatternBase*/ > &&

ranges:: common_range < /*PatternBase*/ > ;
(4) (自 C++23 起)
constexpr /*iterator*/ operator -- ( int )

requires std:: is_reference_v < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*Base*/ > &&
ranges:: bidirectional_range < /*InnerBase*/ > &&
ranges:: common_range < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*PatternBase*/ > &&

ranges:: common_range < /*PatternBase*/ > ;
(5) (自 C++23 起)

递增或递减迭代器。

1) 递增 内部迭代器 ,如同执行 std:: visit ( [ ] ( auto & it ) { ++ it ; } , inner_it_  ) ;
随后按以下方式调整内部和外部迭代器:
  • 若递增后的内部迭代器是模式范围的尾后迭代器,则将其设置为指向下一个内部范围起始位置的迭代器。
  • 若递增后的内部迭代器是某个内部范围的尾后迭代器,则递增外部迭代器。随后:
  • 若递增后的外部迭代器不是外部范围的尾后迭代器,则将内部迭代器设置为指向模式范围起始位置的迭代器。
  • 否则,若 std:: is_reference_v < InnerBase   > true ,则将内部迭代器设置为持有 奇异值 的模式迭代器。
  • 重复上述操作,直到内部迭代器不再是尾后迭代器,或外部迭代器成为尾后迭代器。
2) 等价于 ++* this ;
3) 等价于 auto tmp = * this ;
++* this ;
return tmp ;
4) 若外层迭代器为外层范围的尾后迭代器,则递减该迭代器并将内层迭代器设为最后一个内层范围的尾后迭代器,否则不执行任何操作。
随后按以下方式调整内部和外部迭代器:
  • 若内部迭代器指向内部范围的起始位置,则将其设为模式范围的尾后迭代器。
  • 若内部迭代器指向模式范围的起始位置,则递减外部迭代器,并将内部迭代器设为前一个内部范围的尾后迭代器。
  • 重复上述操作,直到内部迭代器不再指向任何范围的起始位置。
最后,递减内部迭代器,如同执行 std:: visit ( [ ] ( auto & it ) { -- it ; } , inner_it_  ) ;
5) 等价于 auto tmp = * this ;
--* this ;
return tmp ;

返回值

1,4) * this
3,5) 在更改前创建的 * this 副本。