C++20 ranges를 쓰면 파이프라인이 예뻐지긴 하는데, 디버깅/에러 메시지가 길어지는 단점이 있습니다.
작은 패턴
views::filter+views::transform는 조합이 좋음- 범위 생명주기(특히 임시 객체)만 조심
#include <ranges>
#include <vector>
auto evens_squared(const std::vector<int>& v) {
namespace rv = std::ranges::views;
return v
| rv::filter([](int x){ return x % 2 == 0; })
| rv::transform([](int x){ return x * x; });
}
메모
- 범위는 “느리다”가 아니라 “어디서 materialize되는지”가 핵심
- 필요하면
std::vector로 한 번 수집해서 안정적으로 사용
이 글은 샘플입니다.