std::common_iterator

std::common_iterator (공통 반복자 어댑터)

IS의 타입이 다른 비공통 범위를, 반복자 또는 센티널 둘 중 하나를 담고 적절한 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 어댑터로, 비공통 범위(IS의 타입이 다름)를 반복자 또는 센티널을 담아 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 "
}

더 알아보기 (Learn more)

cppreference