【发布时间】:2020-09-15 10:55:50
【问题描述】:
就像 STL 中有 count_if 和 remove_if 算法一样,我想找到类似 execute_if 的东西,它将条件谓词与函数分开执行。
例如,我想要 1 行使用 2 个 lambda 打印所有赔率,如下所示:
auto vec = vector<int>{ 1,2,3,4,5 };
for_each_if(vec.begin(), vec.end(), [](auto val) {return val % 2 != 0; }, [](auto val) { cout << val; });
用算法来做这件事的好方法是什么?
【问题讨论】:
-
今天为什么会有这样的算法?仿函数实际上可以做任何事情,并且使用 lambdas 我们可以轻松地组合现有的仿函数。
-
std::for_each和 lambda 包含一个if?这比你的提议要清楚得多。 -
execute_if函数与普通的if语句有何不同? -
关注点分离。例如:一个调用者会发送 ifodds,另一个调用者会发送 ifevens。两者都会发送打印机。或者一个来电者发送了一个数字打印机,另一个人发送了其他东西。两者都会发送 ifodds。
-
为什么需要两个 lambda?从 C++11 开始,
std::copy_if(vec.begin(), vec.end(), std::ostream_iterator(std::cout, " "), [](auto val) {return val %2 != 0;})将按照您的要求进行操作(假设您希望输出值之间有空格)。