How do I use projections with ranges in C++?

In C++, the ranges library allows for concise manipulation of collections of data. Projections are powerful tools that enable you to transform elements during iterations over ranges. With the introduction of the `` header in C++20, working with ranges and projections has become straightforward and expressive.

Projections allow you to specify how to transform or project each element in a range to another type or value, effectively allowing you to change how the data is processed without altering the original data structure. This feature is particularly useful in various operations like sorting, filtering, or mapping.


#include <iostream>
#include <vector>
#include <ranges>

int main() {
    std::vector<:string> names = {"Alice", "Bob", "Charlie"};
    
    // Use a projection to transform names to their lengths
    auto lengths = names | std::views::transform([](const std::string& name) {
        return name.length();
    });
    
    for (const auto length : lengths) {
        std::cout << length << " ";
    }
    std::cout << std::endl;
    
    return 0;
}
    

C++ projections ranges C++20 transformation programming