std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
来自 cppreference.cn
< cpp | ranges | join with view | iterator
constexpr /*迭代器*/& operator++(); |
(1) | (C++23 起) |
constexpr void operator++( int ); |
(2) | (C++23 起) |
constexpr /*iterator*/ operator++( int ) requires std::is_reference_v</*InnerBase*/> && |
(3) | (C++23 起) |
constexpr /*iterator*/& operator--() requires std::is_reference_v</*InnerBase*/> && |
(4) | (C++23 起) |
constexpr /*iterator*/ operator--( int ) requires std::is_reference_v</*InnerBase*/> && |
(5) | (C++23 起) |
自增或自减迭代器。
此后,如下调整内部和外部迭代器:
- 如果自增后的内部迭代器是模式范围的尾后迭代器,则将其设置为指向下一个内层范围起始的迭代器。
- 如果自增后的内部迭代器是某个内层范围的尾后迭代器,则自增外部迭代器。然后
- 如果自增后的外部迭代器不是外部范围的尾后迭代器,则将内部迭代器设置为指向模式范围起始的迭代器。
- 否则,若 std::is_reference_v<
InnerBase
> 为 true,则将内部迭代器设置为持有奇异值的模式迭代器。
- 重复上述操作,直到内部迭代器不是尾后迭代器,或外部迭代器是尾后迭代器。
2) 等价于 ++*this;。
3) 等价于 auto tmp = *this;
++*this;
return tmp;。
++*this;
return tmp;。
4) 如果外部迭代器是外部范围的尾后迭代器,则自减它,并将内部迭代器设为最后内层范围的尾后迭代器;否则什么都不做。
此后,如下调整内部和外部迭代器:
- 如果内部迭代器指代内层范围的起始,则将其设为模式范围的尾后迭代器。
- 如果内部迭代器指代模式范围的起始,则自减外部迭代器,并将内部迭代器设为前一个内层范围的尾后迭代器。
- 重复上述操作,直到内部迭代器不指代任何范围的起始。
最后,如同通过 std::visit([](auto& it){ --it; },
inner_it_
); 一样自减内部迭代器。5) 等价于 auto tmp = *this;
--*this;
return tmp;。
--*this;
return tmp;。
[编辑] 返回值
1,4) *this
3,5) 更改前 *this 的副本。