Ежедневный бит (е) 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.