如何使用范围 v3 将矢量转换为新矢量

How do I transform a vector into a new vector using range-v3?

本文关键字:转换 新矢量 使用范围 v3      更新时间:2023-10-16

我来自C#世界,在那里我可以写一些东西:

var newList = oldList.Select(x => x * 2).Where(x => x > 3).ToList();

这允许我获取一个列表,以某种方式转换它,并将结果存储在一个新列表中。

我想使用 range-v3 在C++中做同样的事情。我了解转换的工作原理,但是 range-v3 是否提供了类似的"接收器"方法来计算和收集结果?

我正在寻找类似 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;