std:: common_iterator
|
헤더 파일에 정의됨
<iterator>
|
||
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
requires
(
!
std::
same_as
<
I, S
>
&&
std::
copyable
<
I
>
)
|
(C++20부터) | |
std::common_iterator
는
I
반복자/
S
센티널 어댑터로,
I
와
S
의 타입이 다른 비공통 범위(non-common range)를
common_range
로 표현할 수 있습니다. 이는 반복자나 센티널 중 하나를 포함하며, 적절한 동등 비교 연산자
operator
==
를 정의합니다.
std::common_iterator
는 반복자/센티넬 쌍으로 표현되는 시퀀스와
common_range
-유사 시퀀스를 기대하는 레거시 함수들 사이의 "다리" 역할로 사용될 수 있습니다.
목차 |
데이터 멤버
| 멤버 이름 | 정의 |
var
|
std::
variant
<
I, S
>
타입의 객체
( 설명 전용 멤버 객체* ) |
멤버 함수
새로운
common_iterator
를 생성함
(public 멤버 함수) |
|
다른
common_iterator
를 할당함
(public 멤버 함수) |
|
|
가리키는 요소에 접근함
(public 멤버 함수) |
|
common_iterator
를 진행시킴
(public 멤버 함수) |
비멤버 함수
|
(C++20)
|
기본 반복자나 센티널을 비교함
(함수 템플릿) |
|
(C++20)
|
두 반복자 어댑터 간의 거리를 계산함
(함수 템플릿) |
|
(C++20)
|
기본 반복자를 역참조한 결과를 해당 rvalue 참조 타입으로 캐스팅함
(함수) |
|
(C++20)
|
두 기본 반복자가 가리키는 객체를 교환함
(함수 템플릿) |
헬퍼 클래스
|
std::common_iterator
타입의 관련된 차이 타입을 계산함
(클래스 템플릿 특수화) |
|
|
std::common_iterator
타입의 속성에 대한 통일된 인터페이스를 제공함
(클래스 템플릿 특수화) |
예제
#include <algorithm> #include <iostream> #include <iterator> #include <list> #include <string> template<class ForwardIter> void fire(ForwardIter first, ForwardIter last) { std::copy(first, last, std::ostream_iterator<std::string>{std::cout, " "}); } int main() { std::list<std::string> stars{"Pollux", "Arcturus", "Mira", "Aldebaran", "Sun"}; using IT = std::common_iterator< std::counted_iterator<std::list<std::string>::iterator>, std::default_sentinel_t>; fire(IT(std::counted_iterator(stars.begin(), stars.size() - 1)), IT(std::default_sentinel)); }
출력:
Pollux Arcturus Mira Aldebaran
참고문헌
- C++23 표준 (ISO/IEC 14882:2024):
-
- 23.5.5 공통 반복자 [iterators.common]
- C++20 표준(ISO/IEC 14882:2020):
-
- 23.5.4 공통 반복자 [iterators.common]
참고 항목
|
(C++20)
|
범위가 동일한 반복자와 센티넬 타입을 가짐을 명시
(concept) |
view
를
common_range
로 변환
(class template) (range adaptor object) |