std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
From ko.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
의 복사본.