Namespaces
Variants

std:: common_iterator

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
헤더 파일에 정의됨 <iterator>
template < std:: input_or_output_iterator I, std:: sentinel_for < I > S >

requires ( ! std:: same_as < I, S > && std:: copyable < I > )

class common_iterator ;
(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]

참고 항목

범위가 동일한 반복자와 센티넬 타입을 가짐을 명시
(concept)
view common_range 로 변환
(class template) (range adaptor object)