std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
来自 cppreference.com
< cpp | ranges | join with view | iterator
constexpr /*iterator*/& 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 的副本。