std::ranges — composable range-based algorithms and views.
1#include <ranges>2#include <vector>34std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8};56// Traditional7for (auto n : nums) {8 if (n % 2 == 0) std::cout << n * 2 << " ";9}1011// Ranges (lazy evaluation)12auto result = nums13 | std::views::filter([](int n) { return n % 2 == 0; })14 | std::views::transform([](int n) { return n * 2; });1516for (auto n : result) {17 std::cout << n << " ";18}1920// Other views21auto first5 = nums | std::views::take(5);22auto skip2 = nums | std::views::drop(2);23auto reversed = nums | std::views::reverse;24auto chunked = nums | std::views::chunk(3);25auto zipped = std::views::zip(nums, nums);2627// Algorithms with projections28std::ranges::sort(nums, std::ranges::greater{});
Advantages: