【发布时间】:2021-03-21 11:24:43
【问题描述】:
我想知道在 C++20 中使用 <ranges> 是否最终可以从序列中选择并在一行中初始化 set,就像在 C# 中使用 IEnumerable 一样。这可能需要将<ranges> 对象转换为std::initializer_list。
C#:
int[] sequence = new int[] { 0,1,2,3,4 };
HashSet<int> set = new HashSet<int>(sequence.Where((int i) => i % 2 == 0));
C++:
std::vector<int> sequence { 0,1,2,3,4 };
auto matcher = sequence | std::ranges::views::filter([](int i) { return !(i % 2); });
std::set<int> myset(matcher.begin(), matcher.end());
我想做这样的事情:
std::vector<int> sequence { 0,1,2,3,4 };
std::set<int> myset { sequence | std::ranges::views::filter([](int i) { return !(i % 2); }) };
【问题讨论】:
-
你可以自己写扩展like this
标签: c++ c++20 std-ranges