std::vector<int> vi{ 1,2,3,4,5,6,7,8,9,10 }; using namespace ranges; // we combine two views - remove_if and transform to produce a new composition auto evensToStrings = view::remove_if([](int i) {return i % 2 == 1; }) | view::transform([](int i) {return std::to_string(i); }); // than we applay the new compositon to the range, currently a vector auto rng = vi | evensToStrings; // the result will be all evens from the original range converted to strings // rng == {"2","4","6","8","10"}; ranges::for_each(rng, [](auto i) {std::cout << i << " "; }); //or we can combine it directly to the same effect: ranges::for_each(vi | view::remove_if([](int i) {return i % 2 == 1; }) | view::transform([](int i) {return std::to_string(i); }), [](auto i) {std::cout << i << " "; });