Namespaces
Variants

std::ranges::filter_view<V,Pred>:: iterator

From cppreference.net
Ranges library
Range adaptors
class /*iterator*/ ;
(C++20부터)
( 설명 전용* )

filter_view::begin 의 반환 타입.

V bidirectional_iterator 를 모델링하면 bidirectional_range , V forward_iterator 를 모델링하면 forward_range , 그렇지 않으면 input_iterator 입니다.

이 반복자가 나타내는 요소의 수정은 허용되지만, 결과 값이 필터의 조건자를 만족하지 않을 경우 정의되지 않은 동작이 발생합니다.

목차

멤버 타입

유형 정의
iterator_concept
iterator_category
( V forward_range 를 모델링하는 경우에만 존재)

C 를 타입 std:: iterator_traits < ranges:: iterator_t < V >> :: iterator_category 로 정의

value_type ranges:: range_value_t < V >
difference_type ranges:: range_difference_t < V >

데이터 멤버

멤버 설명
ranges:: iterator_t < V > current_ (비공개) 기본 view 에 대한 반복자
( 설명 전용 멤버 객체* )
ranges:: filter_view < V, Pred > * parent_ (비공개) 상위 filter_view 객체에 대한 포인터
( 설명 전용 멤버 객체* )

멤버 함수

반복자를 생성합니다
(public member function)
기본 반복자를 반환합니다
(public member function)
기본 반복자로 전달합니다
(public member function)
반복자를 전진시킵니다
(public member function)
반복자를 감소시킵니다
(public member function)

std::ranges::filter_view:: iterator :: iterator

/*iterator*/ ( )
requires std:: default_initializable < ranges:: iterator_t < V >> = default ;
(1) (since C++20)
constexpr /*iterator*/ ( filter_view & parent,
ranges:: iterator_t < V > current ) ;
(2) (since C++20)
1) current_ parent_ 를 각각 = ranges:: iterator_t < V > ( ) = nullptr 인 기본 멤버 초기화자로 초기화합니다.
2) current_ std :: move ( current ) 로, parent_ std:: addressof ( parent ) 로 초기화합니다.

std::ranges::filter_view:: iterator :: base

constexpr const ranges:: iterator_t < V > & base ( ) const & noexcept ;
(1) (C++20 이후)
constexpr ranges:: iterator_t < V > base ( ) && ;
(2) (C++20 이후)
1) 다음 코드와 동등함: return current_ ; .
2) 다음 코드와 동등함: return std :: move ( current_ ) ; .

std::ranges::filter_view:: iterator :: operator*,->

constexpr ranges:: range_reference_t < V > operator * ( ) const ;
(1) (C++20 이후)
constexpr ranges:: iterator_t < V > operator - > ( ) const

requires /*has-arrow*/ < ranges:: iterator_t < V >> &&

std:: copyable < ranges:: iterator_t < V >> ;
(2) (C++20 이후)
1) 다음 코드와 동등함: return * current_ ; .
2) 다음 코드와 동등함: return current_ ; .

타입 I 에 대해, /*has-arrow*/ < I > 가 모델링되거나 만족되는 것은, I 가 각각 input_iterator 를 모델링하거나 만족하고, I 가 포인터 타입이거나 requires ( I i ) { i. operator - > ( ) ; } 가 true 인 경우에만 해당함.

std::ranges::filter_view:: iterator :: operator++

constexpr /*iterator*/ & operator ++ ( ) ;
(1) (C++20부터)
constexpr void operator ++ ( int ) ;
(2) (C++20부터)
constexpr /*iterator*/ operator ++ ( int )
requires ranges:: forward_range < V > ;
(3) (C++20부터)
1) 다음 코드와 동등함:
current_ = ranges:: find_if ( std :: move ( ++ current_ ) , ranges:: end ( parent_ - > base_ ) ,
std:: ref ( * parent_ - > pred_ ) ) ;
return * this ;
.
2) 다음 코드와 동등함: ++* this ; .
3) 다음 코드와 동등함: auto tmp = * this ; ++* this ; return tmp ; .

std::ranges::filter_view:: iterator :: operator--

constexpr /*iterator*/ & operator -- ( )
requires ranges:: bidirectional_range < V > ;
(1) (C++20 이후)
constexpr /*iterator*/ operator -- ( int )
requires ranges:: bidirectional_range < V > ;
(2) (C++20 이후)
1) 다음 코드와 동등함:
do
-- current_ ;
while ( ! std:: invoke ( * parent_ - > pred_, * current_ ) ) ;
return * this ;
.
2) 다음 코드와 동등함: auto tmp = * this ; --* this ; return tmp ; .

비멤버 함수

(C++20)
기본 반복자를 비교함
(함수)
(C++20)
기본 반복자를 역참조한 결과를 해당 rvalue 참조 타입으로 변환함
(함수)
(C++20)
두 기본 반복자가 가리키는 객체를 교환함
(함수)

operator== (std::ranges::filter_view:: iterator )

friend constexpr bool operator == ( const /*iterator*/ & x, const /*iterator*/ & y )
requires std:: equality_comparable < ranges:: iterator_t < V >> ;
(C++20 이후)

return x. current_ == y. current_ ; 와 동등합니다.

!= 연산자는 합성된 연산자로, operator== 로부터 생성됩니다.

이 함수는 일반적인 비한정 이름 검색 이나 한정 이름 검색 으로는 보이지 않으며, std::ranges::filter_view:: iterator 가 인자들의 연관 클래스일 때만 인자 종속 이름 검색 에 의해 찾을 수 있습니다.

iter_move (std::ranges::filter_view:: iterator )

friend constexpr ranges:: range_rvalue_reference_t < V >

iter_move ( const /*iterator*/ & i )

noexcept ( noexcept ( ranges:: iter_move ( i. current_ ) ) ) ;
(C++20 이후)

다음 코드와 동일합니다: return ranges:: iter_move ( i. current_ ) ; .

이 함수는 일반적인 비한정 이름查找 또는 한정 이름查找 에는 보이지 않으며, std::ranges::filter_view:: iterator 가 인자들의 연관 클래스일 때만 인자 의존查找 에 의해 찾을 수 있습니다.

iter_swap (std::ranges::filter_view:: iterator )

friend constexpr void iter_swap ( const /*iterator*/ & x, const /*iterator*/ & y )

noexcept ( noexcept ( ranges:: iter_swap ( x. current_ , y. current_ ) ) )

requires std:: indirectly_swappable < ranges:: iterator_t < V >> ;
(C++20 이후)

ranges:: iter_swap ( x. current_ , y. current_ ) 와 동등합니다.

이 함수는 일반적인 비한정 이름查找 또는 한정 이름查找 으로는 보이지 않으며, std::ranges::filter_view:: iterator 이 인자들의 연관 클래스일 때만 인자 종속查找 에 의해 찾을 수 있습니다.

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P2259R1 C++20 멤버 타입 iterator_category 가 항상 정의됨 V forward_range 인 경우에만 정의됨
LWG 3533 C++20 base const & 오버로드가 기본 반복자를 복사함 해당 반복자에 대한 참조를 반환함
LWG 3593 C++20 base const & 오버로드가 noexcept가 아닐 수 있음 noexcept로 지정됨