c语言bind函数,C++ bind

c语言bind函数,C++ bind,c/c++ 标准库 bind 函数详解

Bind是一组用于函数绑定的模板。绑定函数时,可以指定部分或全部参数,也可以不指定参数,还可以调整每个参数的顺序。本文主要介绍c/c标准库的bind函数,有需要的朋友可以参考一下。

绑定函数在头文件functional中定义。bind函数可以看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适配”原对象的参数列表。

绑定函数:接收一个函数名作为参数,并生成一个新函数。

auto newCallable=bind(callbale,arg _ list);

arg_list中的参数可能包括_1、_2等。这些是新函数newCallable的参数。

在这篇博客对lambda表达式的介绍中,讨论了find_if的第三个参数的问题。当时是用lambda表达式解决的,但也可以用bind函数解决。

解决方法:bind(check_size,_1,sz)

auto idx=find_if(svec.begin(),svec.end(),bind(check_size,_1,6));

实际上,newCall=bind(check_size,_1,sz)返回一个新函数newCall。这个newCall只接受一个参数,正好满足find_if的要求。

从find_if的角度,啊,newCall是一个单参数的函数,OK,没问题。

从程的角度来看,check_size是一个带两个参数的函数,但是sz(6)是要提前绑定newCall的。

调用newCall(s)时,实际调用的是check_size(s,6),相当于newCall,有两个参数,但第二个参数的默认值是6。newCall(const string s,size _ t SZ=6);所以调用newCall时,传递一个参数就够了。

注:_1、_2等。放在名称空间占位符中,所以使用:

//_1,_n在std:占位符中设置。

使用命名空间std:占位符;

绑定参数的用法:

//g是带有两个参数的可调用对象。

auto g=bind(func,a,b,_2,c,_ 1);//func是一个有5个参数的函数

调用G(X,Y),它等于func(a,b,Y,c,X)

示例:

#包括iostream

#包含矢量

#包含字符串

#包含算法

#包括功能

使用命名空间std

//_1,_n在std:占位符中设置。

使用命名空间std:占位符;

bool check_size(const string s,string:size_type sz){

return s . size()=SZ;

}

bool shorter(常量字符串a,常量字符串b){

返回a . size()b . size();

}

ostream print(ostream os,const string s,const char c){

//c=',';

返回OS s c;

}

int main(){

/*

//用bind实现与lambda相同的函数

vectorstring svec{'aab ',' d ',' aa ',' bb ',' e ',' BBB ' };

stable_sort(svec.begin(),svec.end(),[](常量字符串a,常量字符串b){

返回a . size()b . size();

});

string:size _ type SZ=3;

auto idx=find_if(svec.begin(),svec.end(),bind(check_size,_1,SZ));

cout * idx endl

idx=find_if(svec.begin(),svec.end(),[sz](常量字符串s){

return s . size()=SZ;

});

cout * idx endl

*/

/*

//使用bind更改原始函数的参数位置

//升序排列

vectorstring svec{'aab ',' d ',' aa ',' bb ',' e ',' BBB ' };

sort(svec.begin()、svec.end()、shorter);

for(自动常数s : svec){

cout s“”;

}

cout endl

//因为较短的参数的位置改变了,所以变成降序。

sort(svec.begin()、svec.end()、bind(shorter,_2,_ 1));

for(自动常数s : svec){

cout s“”;

}

cout endl

*/

//绑定引用,必须使用ref或cref函数将对象转换为引用,但不能使用。

ostream os=cout

const char c=“”;

vectorstring svec{'aab ',' d ',' aa ',' bb ',' e ',' BBB ' };

for_each(svec.begin()、svec.end()、[os,c](常量字符串s){

OS s c;

});

os endl

for_each(svec.begin(),svec.end(),bind(print,ref(os),_1,cref(c)));

os endl

cout c endl

}

总结

以上是边肖推出的c/c标准库bind函数的详细说明。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: