关于书中P87下列代码中,less<int>的使用,我目前的理解是 less<int> 是一个类型,& it 是对外部参数的引用。但是为何要加上引用,另外 调用该函数时 lt 对应值如何选取是我的一大疑惑,我目前的调用方法是在主函数中申请 less<int> qwe 这样的一个qwe变量。但感觉这种方式过于鸡肋了= =||。
vector<int> filter( const vector<int> &vec, int val, less<int> < ) { .... while( (iter=find_if(iter , vec.end() , blind2nd(lt,val) ) )!=vec.end() ) .... } int main() { less<int> qwe; vector<int> nvec=filter( vec,10 , qwe ); }
但是在此基础上,若filter函数的lt参数不加引用,则使用函数时较为方便。不过,这种调用方式我有不是很理解了。。lt到底是什么呢?
vector<int> filter( const vector<int> &vec, int val, less<int> lt ) { .... while( (iter=find_if(iter , vec.end() , blind2nd(lt,val) ) )!=vec.end() ) .... } int main() { vector<int> nvec=filter( vec,10 , less<int>() ); }
最后是P89中提议 依照filter()的写法将sub_vec()改为一个template function,我的做法如下,待解决的问题是如何将输出的部分(即对应ElemType型<=value的部分)存入一个新的容器(与initerator所指容器相同),也就是如何return一个答案容器。
#include <functional> #include <vector> #include <algorithm> #include <stdio.h> #include <iostream> using namespace std; template <typename initerator,typename ElemType,typename Comp> void sub_vec( initerator first , initerator last,ElemType val,Comp pred ) { sort(first,last); for(initerator it=first;it!=last;it++) cout<<*it<<' '; initerator iter=find_if( first,last,bind2nd(pred ,val)); for(;first!=iter;first++) cout << *first; } int main() { int a[7]={6,10,8,4,10,7,10}; vector<int> vec(a,a+7); sub_vec( vec.begin(),vec.end(),8,greater<int>() ) ; }