ranges

ranges (Ranges 라이브러리)

C++20에서 추가된 Ranges 라이브러리의 개요 페이지예요. 범위 개념, 뷰(view), 파이프 연산 등을 제공해요.

출처: cppreference

본문

Ranges 라이브러리는 기존 반복자 쌍 방식 대신, **범위(range)**와 **제약(constraint)**을 중심으로 알고리즘을 다시 설계한 것이에요. <algorithm>, <ranges> 헤더에 있어요.

핵심 요소를 정리하면:

  • 범위 개념(range concept): std::ranges::range, input_range, forward_range, random_access_range 등이 반복자 요구사항을 추상화해요.
  • 제약 알고리즘: std::ranges::sort, std::ranges::find 등이 반복자 대신 범위 하나를 받고, std::invocable 제약으로 컴파일 타임 검사를 해요.
  • 뷰(view): std::views::filter, std::views::transform, std::views::take 등이 지연(lazy) 합성된 새 범위를 만들어요.
  • 파이프 연산자: v | std::views::filter(...) | std::views::transform(...)처럼 뷰를 함수처럼 합성해요.
#include <ranges>
#include <vector>

std::vector<int> v{1, 2, 3, 4, 5, 6};
// 3보다 큰 수를 골라, 각각 2배로 파이프 합성
auto result = v | std::views::filter([](int x){ return x > 3; })
                | std::views::transform([](int x){ return x * 2; });

반복자 쌍을 명시하는 대신 범위 객체 하나로 알고리즘을 호출해서 코드가 훨씬 간결하고 읽기 좋아져요. C++20의 큰 변화 중 하나예요.

더 알아보기 (Learn more)

cppreference