std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
从 zh.cppreference.net
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 起) |
自增或自减迭代器。
此后,按如下方式调整内部和外部迭代器:
- 如果自增后的内部迭代器是模式范围的尾后迭代器,则将其设置为下一个内部范围起始处的迭代器。
- 如果自增后的内部迭代器是某个内部范围的尾后迭代器,则自增外部迭代器。然后:
- 重复上述操作,直到内部迭代器不是尾后迭代器,或者外部迭代器是尾后迭代器。
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
副本。