泛型函数

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

template <class T> T median(vector<T> v)
{
    typedef typename vector<T>::size_type vec_sz;//注:关键字typename,说明vector<T>::size_type是一个类型。

     vec_sz size=v.size();
     if(size==0)
     {
         throw domain_error("空的集合!");
     }
     sort(v.begin(),v.end());
     vec_sz mid=size/2;

     return mid%2==0?(v[mid]+v[mid-1])/2:v[mid];
     
}

template <class T> T max_New(const T& left,const T& right)
{
    return left>right?left:right;
}
 

int main()
{
    int a[8]={1,2,3,90,5,6,7,9};
    vector<int> vi(a,a+8);
    cout<<median(vi);

    double b[4]={2.4,5,5.6,0.9};
    vector<double> vd(b,b+4);
    cout<<endl<<median(vd);
 
    double num=max_New(3.36,6.26);//两个参数的类型必须相同。
    cout<<endl<<num;


    /*string strs[]={"a","b","c"};
    vector<string> vs(strs,strs+sizeof(strs)/sizeof(string));
    cout<<endl<<median(vs);*/ //此处编译时报错,因为string不支持除法。
}

 

posted @ 2013-10-18 12:01  hometown  阅读(236)  评论(0编辑  收藏  举报