命名空间
变体
操作

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

来自 cppreference.cn
 
 
范围库
范围适配器
 
 
constexpr /*iterator*/& operator++();
(1) (since C++23)
constexpr void operator++( int );
(2) (since C++23)
constexpr /*iterator*/ operator++( int )

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

             ranges::forward_range</*InnerBase*/>;
(3) (since 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) (since 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) (since 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;

[edit] 返回值

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