【发布时间】:2022-11-02 22:29:46
【问题描述】:
我可以使用 std::views::transform 创建新的 stream-style 容器,然后打印它,如下所示:
#include<iostream>
#include<vector>
#include<ranges>
using namespace std;
int main() {
// clang -std=c++20
std::vector<int> input = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
auto output = input
| std::views::filter([](const int n) {return n % 3 == 0; })
| std::views::transform([](const int n) {return n * n; });
for (auto o : output) {
cout << o << endl;
}
return 0;
}
是的,它有效,但我希望简单地将我的for 循环写入| 连接的管道中,有没有办法将代码更改为:
input
| std::views::filter([](const int n) {return n % 3 == 0; })
| std::views::transform([](const int n) {return n * n; })
| std::views::SOME_FUNCTION(cout<<n<<endl);
这避免了我的for 循环。
所以我的问题是:std::views 是否有 SOME_FUNCTION 可以满足我的需求?
【问题讨论】:
-
你的
for-loop 很简单。
标签: c++ c++20 std-ranges