【发布时间】:2021-04-19 04:13:09
【问题描述】:
我可以从标准输入读取ints,将它们转换为odd或even,将结果写入标准输出:
std::vector<int> v;
std::ranges::copy(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(v)
);
std::ranges::copy(
v | std::views::transform([](int a_int){return a_int%2 ? "odd":"even";}),
std::ostream_iterator<std::string>(std::cout, " ")
);
可以在没有临时变量的情况下完成:
std::transform(
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::ostream_iterator<std::string>(std::cout, " "),
[](int a_int){return a_int%2 ? "odd":"even";});
如何使用 C++20 范围适配器来执行此操作而无需临时设置?
有点像:
std::istream_iterator<int>(std::cin)
| std::transform([](int a_int){return a_int%2 ? "odd":"even";})
| std::ostream_iterator<std::string>(std::cout, " ");
【问题讨论】:
-
显然有一个
istream_view。 -
@HTNW 不幸的是,它是红色的,尚未在 cppreference.com 上记录
标签: c++ functional-programming c++20