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의 큰 변화 중 하나예요.