pis*_*hio 8 c++ algorithm lambda vector
其中中发现的功能std::algorithm我似乎无法找到最基本的,我能想到的一个:选择一个集合的子集(例如,返回所有的奇数,所有具有状态=="使用"的员工,所有物品价格低于20美元).
所以,给出一个像这样的整数列表
vector<int> ints {1, 9, 3, 27, 5, 19, 3, 8, 2, 12};
vector<int> evens = ?
vector<int> greaterThan7 = ?
Run Code Online (Sandbox Code Playgroud)
如何找到那些均匀的和那些大于7的?
Bar*_*rry 19
如果您想要更实用的功能,可以查看增强范围库.具体来说,filtered:
for (int i : ints | filtered([](int i){return i > 7;}))
{
...
}
Run Code Online (Sandbox Code Playgroud)
这为您提供了一个懒惰的视图,而无需构建新容器.
您可以从Eric Niebler获得相同的range-v3:
for (int i : view::filter(ints, [](int i){return i > 7;})
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处就是你可以将它分配给一个向量(所以你可以选择它是懒惰还是渴望,Boost.Ranges不允许).
std::vector<int> greaterThan7 = view::filter(ints, [](int i){return i > 7;});
std::vector<int> sameThing = ints | view::filter([](int i){return i > 7;});
Run Code Online (Sandbox Code Playgroud)
Vla*_*cow 17
例如
vector<int> ints {1, 9, 3, 27, 5, 19, 3, 8, 2, 12};
vector<int> evens;
std::copy_if( ints.begin(), ints.end(), std::back_inserter( evens ),
[]( int x ) { return x % 2 == 0; } );
Run Code Online (Sandbox Code Playgroud)
这是一个示范计划
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> ints { 1, 9, 3, 27, 5, 19, 3, 8, 2, 12 };
std::vector<int> evens;
std::copy_if( ints.begin(), ints.end(), std::back_inserter( evens ),
[]( int x ) { return x % 2 == 0; } );
for ( int x : evens ) std::cout << x << ' ';
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它的输出是
8 2 12
Run Code Online (Sandbox Code Playgroud)