gpt4 book ai didi

c++ - 如何用STL编写仿函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:41 25 4
gpt4 key购买 nike

在 STL 中,以下是可能的:

int count = count_if(v.begin(), v.end(), bind2nd(less<int>(), 3));

这将返回 v 中小于 3 的元素数。如何编写一个返回 0 到 3 之间元素数的仿函数?我知道 boost 对此有一些设施,但在纯 STL 中是否可行?

最佳答案

如果您的意思是使用标准库的仿函数组合工具,那么不会,至少在 C++98 中不会。在 C++11 中,您可以使用 std::bind 来任意组合仿函数:

using std::placeholders;
int count = std::count_if(v.begin(), v.end(),
std::bind(std::logical_and<bool>(),
std::bind(std::less<int>(), _1, 3),
std::bind(std::greater<int>(), _1, 0)));

但这并不能真正解决如此简单的谓词带来的麻烦。

如果允许使用 C++11 功能,那么最简单的方法可能是 lambda,无需制作复杂的仿函数组合(您自己):

int count = std::count_if(v.begin(), v.end(), [](int arg) { 
return arg > 0 && arg < 3; });

但是对于 C++98 Chubsdad 的答案可能是最好的解决方案。

关于c++ - 如何用STL编写仿函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13799550/

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