std:: iterator_traits <std::counted_iterator>
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
|
(C++20)
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
iterator_traits
<std::counted_iterator>
(C++20)
|
|
헤더에 정의됨
<iterator>
|
||
|
template
<
std::
input_iterator
I
>
requires
/* see below */
|
(C++20부터) | |
표준 부분 특수화 또는 프로그램 정의 특수화에서 생성된 사용자 정의로부터 속성을 상속받으며,
std::
iterator_traits
<
I
>
의 멤버 타입
pointer
가 조정된 상태로, 여기서
I
는
input_iterator
를 모델링합니다.
특히,
iterator_concept
(존재하는 경우)와
iterator_category
는
std::
iterator_traits
<
I
>
로부터 상속됩니다.
requires-clause의 조건은 true 가 되는 경우는 오직 std:: iterator_traits < I > 가 기본 템플릿으로부터 생성되지 않을 때뿐입니다.
목차 |
참고
P2259R1
이전에는, 이 특수화가
std::
iterator_traits
<
I
>
이 기본 템플릿에서 생성된 경우에도 사용되었습니다. 그 결과
std::
counted_iterator
<
I
>
를 iterator 개념(예:
forward_iterator
)에 대해 테스트할 때,
/*ITER_CONCEPT*/
의 결정이
I::iterator_concept
를 고려하지 않아,
std::
counted_iterator
<
I
>
가 해당 개념을 모델링할 수 없는 것처럼 잘못 동작하는 경우가 있었습니다. 이 잘못된 동작은 libstdc++ 10.4 이전 버전과 MSVC STL VS 2022 17.0 Preview 3 이전 버전에서 구현되었습니다.
표준 라이브러리는 포인터 타입, std::iterator_traits , std::counted_iterator , 그리고 std::common_iterator 에 대한 부분 특수화를 제공합니다.
예제
#include <iterator> #include <list> #include <type_traits> #include <vector> int main() { std::vector v{1, 2, 3, 4}; std::list l{1, 2, 3, 4}; std::counted_iterator iv{v.begin(), 3}; std::counted_iterator il{l.begin(), 3}; static_assert(std::is_same<int*, std::iterator_traits<decltype(iv)>::pointer>()); static_assert(std::is_same<void, std::iterator_traits<decltype(il)>::pointer>()); }
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| P2259R1 | C++20 |
requires-clause가 없음
pointer
가 무조건
void
로 정의됨
|
제약 조건 추가됨 |
참고 항목
|
iterator의 속성에 대한 통일된 인터페이스를 제공합니다
(클래스 템플릿) |