泛型编程

来源:互联网 发布:淘宝alexa排名查询 编辑:程序博客网 时间:2024/06/05 20:38
#include<iostream>#include<fstream>#include<string>#include<sstream>using namespace std;template<typename T1,typename T2>T1& print(T1 &s,const T2 &val){s<<val;return s;}int main(){string str="Hello World",desstr;ostringstream oss(desstr);ofstream output("1.txt");//写到coutprint(cout,str)<<endl;//写到文件print(output,str)<<endl;output.close();//写到stringstreamprint(oss,str);cout<<oss.str()<<endl;return 0;}

#include<iostream>#include<string>using namespace std;template<typename T>int compare(const T&v1,const T &v2){if(v1>v2)return 1;else if(v1==v2)return 0;elsereturn -1;}int main(){/*如下调用OK*/string v1="hi",v2="world";cout<<compare(v1,v2)<<endl;/*如下调用错误*//*根据两个参数,T被推断出不同的类型,无法进行正常的模板实例化*/cout<<compare("hi","world");return 0;}

#include<iostream>#include<string>using namespace std;template<typename T>const T& findBig(const T& v1,const T& v2){return v1>v2?v1:v2;}int main(){string v1="hi",v2="world";cout<<findBig(v1,v2)<<endl;cout<<findBig(2,1)<<endl;cout<<findBig(1.1,2.2)<<endl;return 0;}

#include<iostream>#include<string>#include<vector>#include<iterator>#include<algorithm>using namespace std;template<typename T1,typename T2>T1 &FIND(T1 & it1,T1 &it2,const T2 &val){while(it1!=it2){if(*it1==val)return it1;it1++;}return it2;}int main(){istream_iterator<int> in(cin),eof;vector<int> vec(in,eof);ostream_iterator<int> out(cout," ");copy(vec.begin(),vec.end(),out);cout<<"input what you want to find:";int data;getchar();cin.clear();cin>>data;vector<int>::iterator it;if((it=FIND(vec.begin(),vec.end(),data))!=vec.end())cout<<"Find "<<*it<<endl;elsecout<<"Can't Find "<<data<<endl;return 0;}

#include<iostream>#include<string>#include<vector>#include<deque>#include<iterator>#include<algorithm>using namespace std;template<typename T>typename T::value_type findMost(T it1,T it2){size_t size=0;T first=it1;while(it1!=it2){size++;it1++;}typedef vector<typename T::value_type> VecType;VecType v(size);VecType::iterator newFirst=v.begin();VecType::iterator newLast=v.end();std::uninitialized_copy(first,it2,newFirst);sort(v.begin(),v.end());VecType::iterator preIter=newFirst,maxOccurIter=newFirst;VecType::size_type maxCount=0,count=0;while(newFirst!=newLast){if(*newFirst!=*preIter){if(count>maxCount){maxCount=count;maxOccurIter=preIter;}count=0;}preIter=newFirst;newFirst++;count++;}return *maxOccurIter;}int main(){istream_iterator<int> in(cin),eof;ostream_iterator<int> out(cout," ");vector<int> vec(in,eof);copy(vec.begin(),vec.end(),out);cout<<"出现次数最多的是:"<<findMost(vec.begin(),vec.end())<<endl;return 0;}

#include<iostream>#include<string>#include<vector>#include<deque>#include<iterator>#include<algorithm>#include<list>using namespace std;/*template<typename T>void print(T& t){typename T::size_type i=0;typename T::iterator it=t.begin();while(i!=t.size()){cout<<*it<<" ";it++;i++;}}*/template<typename T>void print(T &t){typename T::iterator it=t.begin();while(it!=t.end()){cout<<*it++<<" ";}}int main(){istream_iterator<int> in(cin),eof;ostream_iterator<int> out(cout," ");vector<int> vec(in,eof);copy(vec.begin(),vec.end(),out);cout<<endl;//cout<<"出现次数最多的是:"<<findMost(vec.begin(),vec.end())<<endl;print(vec);cout<<endl;list<int> lst(vec.size());copy(vec.begin(),vec.end(),lst.begin());print(lst);cout<<endl;return 0;}

#include<iostream>using namespace std;/*类型模板形参与非类型模板形参*/template<typename T,size_t N>void array_init(T (&a)[N]){size_t i=0;for(i=0;i!=N;i++)a[i]=i;}template<typename T,size_t N>void printValues(T (&a)[N]){size_t i;for(i=0;i!=N;i++)cout<<a[i]<<" ";}int main(){int a[5];array_init(a);printValues(a);cout<<endl;}

#include<iostream>using namespace std;template<typename T>int compare(const T &a,const T &b){if(a<b)return -1;if(b<a)return 1;return 0;}int main(){cout<<compare(1,2)<<endl;/*int*/cout<<compare(1.1,0.2)<<endl;/*double*/cout<<compare(static_cast<int>(1.1),1)<<endl;/*强制类型转化*/cout<<compare(1.1,static_cast<double>(1))<<endl;cout<<compare("hello","world")<<endl;return 0;}


包含编译模型

weiwei.h头文件如下:

#ifndef WEIWEI_H#define WEIWEI_Htemplate<typename T> int compare(const T&,const T&);/*函数声明*/#include"compare.cpp"#endif

compare.cpp文件如下:

template<typename T>int compare(const T&a,const T&b){if(a<b)return -1;if(b<a)return 1;return 0;}


main.cpp函数如下:

#include<iostream>#include"weiwei.h"using namespace std;int main(){cout<<compare(1,2)<<endl;/*int*/cout<<compare(1.1,0.2)<<endl;/*double*/cout<<compare(static_cast<int>(1.1),1)<<endl;/*强制类型转化*/cout<<compare(1.1,static_cast<double>(1))<<endl;cout<<compare("hello","world")<<endl;return 0;}


#ifndef MEDIAN_H#define MEDIAN_H#include <vector>using std::vector;template <typename T>const T & findMax(const vector<T> &vec);#include "compare.cpp"#endif

 

#include<vector>using std::vector;template <typename T>const T & findMax(const vector<T> &vec){size_t max=0;for(size_t i=1;i!=vec.size();i++)if(vec[max]<vec[i])max=i;return vec[max];}

 

#include"weiwei.h"#include<iostream>using namespace std;int main(){int a[3]={1,2,3};vector<int> vec(a,a+3);cout<<findMax(vec)<<endl;return 0;}