essential C++中的一些疑问记录

关于书中P87下列代码中,less<int>的使用,我目前的理解是 less<int> 是一个类型,& it 是对外部参数的引用。但是为何要加上引用,另外 调用该函数时 lt 对应值如何选取是我的一大疑惑,我目前的调用方法是在主函数中申请 less<int> qwe 这样的一个qwe变量。但感觉这种方式过于鸡肋了= =||。

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()
{
  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>() ) ;
}
View Code

猜你喜欢

转载自www.cnblogs.com/askl123/p/11429241.html