如何使用range-v3将矢量转换为新矢量?

sdg*_*sdh 3 c++ vector range-v3

我来自C#世界,我可以写下这样的东西:

var newList = oldList.Select(x => x * 2).Where(x => x > 3).ToList();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jar*_*d42 7

你可能会这样做:

std::vector<int> v2 = v
                    | ranges::view::transform([](int x) { return x * 2; })
                    | ranges::view::filter([](int x) { return x > 3; });
Run Code Online (Sandbox Code Playgroud)

演示

或者,如果你喜欢auto左边:

auto v2 = v 
        | ranges::view::transform([](int x) { return x * 2; }) 
        | ranges::view::filter([](int x) { return x > 3; }) 
        | ranges::to_vector;
Run Code Online (Sandbox Code Playgroud)

  • @sdgfsdh关闭.这是`| ranges :: to_vector`(或`| ranges :: to_ <std :: list>()`). (3认同)