c++primer泛型算法浅析(三)

for_each(begin_iter,end_iter2,operation); 用法由函数名可见。operation使一个单参数函数,可以使用lambda表达式。

如何让已有的函数像lambda表达式一样拥有“闭包”?可以使用bind();使用样例如下:

//auto newCallable = bind(callable,arg_list);
bool check_size(const string&s,string::size_type sz)
{return s.size()>=sz;}
...
auto check6=bind(check_size,_1,6);
string s="hello";
bool b1=check6(s);
//之后可以用:
auto wc=find_if(words.begin(),words.end(),[sz](const string&a)) ;
auto wc=find_if(words.begin(),words.end(),bind(check_size,_1,sz));

check_size的参数表仍具有两个参数,但其中用占位符所占位置参数仍由用户输入,第二个位置参数由sz绑定,之后再调用相当于只有一个参数。

//昨天没有发出来

使用占位符前需要使用命名域using namespace std::placeholders;

通过bind可以重排参数顺序:

sort(words.begin(),words.end(),isShorter);
sort(words.begin(),words.end(),bind(isShorter,_2,_1));
//由此实现逻辑的变换。
如何绑定引用参数呢?利用ref() for_each(words.begin(),words.end(),bind(print,ref(os),_1,' '));
//由此实现不可复制类的传递 如ostream类





你可能感兴趣的:(c++primer)