C++ · 5 · STL24 / 36 · 67%
Ranges & Views (C++20)
Composable, lazy pipelines that replace nested loops.
Examples: views::filter, transform, take, ranges::sort
shortcuts: ← prev · → next · M mark
1
No More begin/end
Range algorithms take the container directly.
Example
example
#include <ranges>
#include <algorithm>
std::ranges::sort(v);
auto it = std::ranges::find(v, 42);
bool ok = std::ranges::all_of(v, is_valid);2
Views Pipe Together
Views are lazy — nothing runs until you iterate.
Example
example
namespace rv = std::views;
auto result = v
| rv::filter([](int x){ return x % 2 == 0; })
| rv::transform([](int x){ return x * x; })
| rv::take(5);
for (int x : result) std::cout << x << ' ';TIP
No intermediate vectors are allocated — each element flows through the whole pipeline once.
3
Handy Views
The ones you will reach for daily.
Complexity
| views::filter | keep matching | |
| views::transform | map each element | |
| views::take / drop | slice | |
| views::reverse | iterate backwards | |
| views::iota(0, n) | lazy number range | |
| views::split / join | tokenize |
4
Dangling Views
A view does not own its data.
Example
example
auto bad() {
std::vector<int> v{1,2,3};
return v | std::views::filter(odd); // DANGLING: v dies here
}
auto ok = std::ranges::to<std::vector>( // C++23: materialize
v | std::views::filter(odd));