C++11的函数对象怎么使用
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"C++11的函数对象怎么使用",在日常操作中,相信很多人在C++11的函数对象怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++11的函数对
千家信息网最后更新 2026年11月02日C++11的函数对象怎么使用
这篇文章主要介绍"C++11的函数对象怎么使用",在日常操作中,相信很多人在C++11的函数对象怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++11的函数对象怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
函数对象
考虑下面的代码:
bool istarget(const string& s){
return s.size() < 2;
}
vector v{"This","is", "a", "predicate", "."};
auto found = find_if(v.begin(), v.end(), istarget);
cout << *found << endl;
使用find_if算法从给定的vector中找到第一个长度小于2的string对象。
如果我们希望在istarget中选择string时使用变量而不是固定的2的时候,一般的函数就不能满足需求了(虽然使用全局变量算是一个选项)。这时的一个选择就是函数对象。
首先定义一个重载了()运算符的IsTarget类:
class IsTarget{
unsigned int max;
public:
IsTarget(int m):max(m){}
bool operator()(const string& s){
return s.size() < max;
}
};IsTarget类可以像下面这样使用:
string test("H");
IsTarget it(2);
cout << it(test) << endl;注意it(test)的部分,从代码的形式来看,这个类的对象可以以e(args)的形式编码并执行,因此它也是可执行对象。长度信息是在创建对象it时指定,在()运算符被执行是使用。在回到find_if的例子,可以这样使用IsTarget类:
vector v{"This","is", "a", "predicate", "."};
auto found = find_if(v.begin(), v.end(), IsTarget(2));
cout << *found << endl; 在执行find_if时,比较的长度信息作为参数传递给IsTarget类,以便在执行选择操作时使用。
使用捕获列表
使用函数对象还是有些麻烦,继续请出lambda表达式,它有一个被[ ]包围的捕获列表,用于捕获lambda表达式所在函数的局部变量:
vector v{"This","is", "a", "predicate", "."};
unsigned int max = 2;
auto found = find_if(v.begin(), v.end(),
[max](const string& s){return s.size() < max;}); max是在find_if执行的函数里定义的变量,将其包含在lambda表达式的捕获列表[ ]中以后,就可以在lambda表达式中使用它了。
到此,关于"C++11的函数对象怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
对象
函数
变量
表达式
学习
长度
选择
代码
信息
形式
是在
更多
运算符
帮助
运算
实用
接下来
例子
全局
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
花魁咖啡
中智农互联网科技
喔噻互联网科技有限公司
互联网科技公司发展
互联网科技金融公司
互联网科技作文
上海喔噻互联网科技
互联网金融科技平台
奔汉互联网科技
广州紫鲸互联网科技
美国互联网前沿科技
恒生科技互联网指数分析
互联网科技公司招聘
互联网实体化科技化
昭通互联网科技选哪家
996高科技互联网公司
佛山市拉法互联网科技有限公司
互联网时代科技型公司的机会
互联网时代高科技布局
现代互联网科技公司
互联网科技工作委员会主任
圆梦互联网科技
互联网科技金融公司
互联网科技上市公司
团飞科技与伯堂互联网服务平台
杭州壁岐互联网科技有限公司
南博望互联网科技有限公司
山东子淼互联网科技有限公司
易租星互联网科技有限公司
北京品多多互联网科技有限公司