gpt4 book ai didi

c++ - 如何组合一些仿函数来生成 `isOdd` 函数?

转载 作者:行者123 更新时间:2023-11-30 02:09:31 24 4
gpt4 key购买 nike

如何组合多个仿函数来生成 isOdd 仿函数?

等于

模数

bind2nd

...

int nums[] = {0, 1, 2, 3, 4};
vector<int> v1(nums, nums+5), v2;
remove_copy_if(v1.begin(), v1.end(), back_inserter(v2), isOdd);

v2 => {0, 2, 4}

最佳答案

仅使用标准库中提供的原语,这实际上出奇地困难,因为 bind1st 提供的绑定(bind)器和 bind2nd不允许您编写函数。在这种特殊情况下,您要检查是否

x % 2 == 1

其中,如果你考虑如何<functional>原语工作,相当于

equal_to(modulus(x, 2), 1)

问题是 <functional> 中的组件不允许您很容易地将一个函数的输出作为输入传递给另一个函数。相反,您将不得不依赖其他一些技术。在这种情况下,您可以通过连续两次使用 not1 来作弊。 :

not1(not1(bind2nd(modulus<int>(), 2)))

这是可行的,因为它等同于

!!(x % 2)

如果 x 是偶数,那么这是 !!0 ,即 false ,如果 x 是奇数,则为 !!1 ,即 true .通过not1双重过滤的原因是确保结果的类型为 bool而不是 int , 因为

bind2nd(modulus<int>(), 2)

是一个生成 int 的函数而不是 bool你想要的。

关于c++ - 如何组合一些仿函数来生成 `isOdd` 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5367629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com