在 std::algorithm
中找到的功能中,我似乎找不到我能想到的最基本的功能之一:选择集合的一个子集(例如,返回所有奇数数字,所有状态 == 'employed' 的员工,所有价格低于 20 美元的元素)。
所以,给定一个整数列表
vector<int> ints {1, 9, 3, 27, 5, 19, 3, 8, 2, 12};
vector<int> evens = ?
vector<int> greaterThan7 = ?
如何求偶数和大于7的数?
最佳答案
如果您想要更实用的东西,可以查看 boost range 库。具体来说,filtered
:
for (int i : ints | filtered([](int i){return i > 7;}))
{
...
}
这为您提供了一个惰性 View ,无需构建新容器。
您可以从 Eric Niebler 的 range-v3
获得相同的信息:
for (int i : view::filter(ints, [](int i){return i > 7;})
{
...
}
好处是您也可以将其分配给一个 vector (因此您可以选择它是懒惰的还是急切的,这是 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;});
关于C++ "select"算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656020/