std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
來自 cppreference.com
< 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 的副本。