Namespaces
Variants

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

From ko.cppreference.net
 
 
Ranges library
Range adaptors
 
 
class /*iterator*/;
(since C++20)
(exposition only*)

The return type of filter_view::begin.

This is a bidirectional_iterator if V models bidirectional_range, a forward_iterator if V models forward_range, and input_iterator otherwise.

Modification of the element denoted by this iterator is permitted, but results in undefined behavior if the resulting value does not satisfy the filter's predicate.

멤버 타입

유형 정의
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로 지정됨