Ежедневный бит (е) C++ # 139, Представление ленивого преобразования C++ 20: std::views::transform.

C++20 std::views::transform можно использовать для ленивого создания диапазона преобразованных элементов, включая возможность изменения типа элемента диапазона.

#include <vector>
#include <ranges>


std::vector<int> data{1,2,3,4,5};

// produce a view of squared values
constexpr auto square = 
  std::views::transform([](int v) { return v * v; });
for (int v : data | square) {
    // iterate over: 1,4,9,16,25
}

constexpr auto as_strings = 
  std::views::transform([](int v) { return std::to_string(v); });
// views::transform can produce a view with a different element type
for (std::string v : data | as_strings) {
    // iterate over: "1"s,"2"s,"3"s,"4"s,"5"s
}

Откройте пример в Compiler Explorer.