5

我来自 C# 世界,在那里我可以编写如下内容:

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

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

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

我正在寻找类似的东西toVector,它会将结果范围计算为新分配的std::vector.

4

1 回答 1

9

你可以这样做:

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;
于 2017-01-05T16:45:43.713 回答