如何使用 range-v3 将向量转换为新向量?
How do I transform a vector into a new vector using range-v3?
我来自 C# 世界,在那里我可以编写如下内容:
var newList = oldList.Select(x => x * 2).Where(x => x > 3).ToList();
这允许我获取一个列表,以某种方式对其进行转换,并将结果存储在一个新列表中。
我想在 C++ 中使用 range-v3. I understand how the transformations work, but does range-v3 提供类似的 "sink" 方法来计算和收集结果吗?
我正在寻找类似 toVector
的东西,它会将结果范围计算到新分配的 std::vector
中。
你可以这样做:
std::vector<int> v2 = v
| ranges::view::transform([](int x) { return x * 2; })
| ranges::view::filter([](int x) { return x > 3; });
或者,如果您更喜欢左侧的 auto
:
auto v2 = v
| ranges::view::transform([](int x) { return x * 2; })
| ranges::view::filter([](int x) { return x > 3; })
| ranges::to_vector;
我来自 C# 世界,在那里我可以编写如下内容:
var newList = oldList.Select(x => x * 2).Where(x => x > 3).ToList();
这允许我获取一个列表,以某种方式对其进行转换,并将结果存储在一个新列表中。
我想在 C++ 中使用 range-v3. I understand how the transformations work, but does range-v3 提供类似的 "sink" 方法来计算和收集结果吗?
我正在寻找类似 toVector
的东西,它会将结果范围计算到新分配的 std::vector
中。
你可以这样做:
std::vector<int> v2 = v
| ranges::view::transform([](int x) { return x * 2; })
| ranges::view::filter([](int x) { return x > 3; });
或者,如果您更喜欢左侧的 auto
:
auto v2 = v
| ranges::view::transform([](int x) { return x * 2; })
| ranges::view::filter([](int x) { return x > 3; })
| ranges::to_vector;