std::common_iterator
std::common_iterator (공통 반복자 어댑터)
I와 S의 타입이 다른 비공통 범위를, 반복자 또는 센티널 둘 중 하나를 담고 적절한 operator==를 정의해 공통 범위(common_range)로 나타낼 수 있게 하는 반복자·센티널 어댑터예요. C++20부터 있어요.
출처: cppreference
본문
<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;
std::common_iterator는 반복자 I/센티널 S 어댑터로, 비공통 범위(I와 S의 타입이 다름)를 반복자 또는 센티널을 담아 operator== 비교 연산자를 정의함으로써 공통 범위(common_range)처럼 나타낼 수 있게 해요. std::common_iterator는 반복자/센티널 쌍으로 나타낸 시퀀스와 common_range 방식 시퀀스를 기대하는 옛 함수 사이의 "다리"로 쓸 수 있어요.
데이터 멤버
var(exposition-only) —std::variant<I, S>타입 객체.
멤버 함수
- (constructor) — 새 common_iterator를 생성해요.
- operator= — 다른 common_iterator를 할당해요.
- operator*, operator-> — 가리키는 요소에 접근해요.
- operator++, operator++(int) — common_iterator를 전진시켜요.
비멤버 함수
- operator== (C++20) — 기반 반복자·센티널을 비교해요.
- operator- (C++20) — 반복자와 센티널 사이의 거리를 계산해요.
- iter_move, iter_swap — 이동·교환 지원.
예제
#include <iterator>
#include <ranges>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v{1, 2, 3};
// 서로 다른 타입의 반복자/센티널을 common range로
std::common_iterator<std::vector<int>::iterator, std::default_sentinel_t> it(v.begin());
for (; it != std::default_sentinel; ++it)
std::cout << *it << ' '; // "1 2 3 "
}