我想用函数模板实现输入n个整型 、 双精度型 、字符串型数据能够按从小到大的顺序输出
#include<iostream>
#include<string>
#include<vector>
using namespace std;
template <typename T,vector V>
T sort(typename T,vector V)
{
vector<typename T>::iterator iter;
for(int i=V.size()-1;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(V[j]>V[j+1])
{
int t;
t=V[j];
V[j]=V[j+1];
V[j+1]=t;
}
}
}
for(iter=V.begin();iter!=V.end();iter++)
{
cout<<(*iter)<<" ";
}
}
int main()
{
cout<<"******用模板函数排序******"<<endl<<endl;
cout<<"请选择比较数据的类型:"<<endl<<"1:整型(int)"<<endl<<"2:双精度型(double)"<<endl<<"3:字符串型(string)"<<endl;
cout<<"请输入你的选择:";
int n;
cin>>n;
if(n==1)
{ cout<<"请输入你要比较的数据:"<<endl;
vector<int>vec1;
for(int i=0;;i++)
cin>>vec1[i];
sort(int ,vec1);
else if(n==2)
{ cout<<"请输入你要比较的数据:"<<endl;
vector<double>vec2;
for(int i=0;;i++)
cin>>vec2[i];
sort(double ,vec2);
else if(n==3)
{cout<<"请输入你要比较的数据:"<<endl;
vector<string>vec3;
for(int i=0;;i++)
cin>>vec3[i];
sort(string ,vec3);
}
}
}
system("pause");
return 0;
}
哎,错误百出,求大神指教。。。
[解决办法]
下面是由你的代码修改的sort函数:
template <typename T,typename Vector>//模板参数或者是typename/struct/class,或者是template,或者是整数类型,不能是vector
void sort( Vector & V)//函数参数不能是类型,sort(typename T...是不正确的。vector应该传引用。该函数并没有返回值。
{
typename Vector::iterator iter;
for(int i=V.size()-1;i>0;i--)
{
for(int j=0;j<i;j++)
{
if(V[j]>V[j+1])
{
T t;//临时变量应该是T类型,而不是int
t=V[j];
V[j]=V[j+1];
V[j+1]=t;
}
}
}
for(iter=V.begin();iter!=V.end();iter++)
{
cout<<(*iter)<<" ";
}
}
sort<int>(vec1);
template < typename T, typename A, template< typename _T, typename _A> class _V >
void sort( _V< T, A > V)
{
typedef _V<T, A> vector_type;
typename vector_type::iterator iter
...
template < typename _V >
void sort( _V V)
{
typedef typename _V::value_type T;
typename _V::iterator iter
...
#include<iostream>
#include<string>
#include<vector>
using namespace std;
template <class V>
void mySort(V &con)
{
//vector<typename T>::iterator iter;
typename V::iterator iter;
typename V::size_type i;
typename V::size_type j;
for(i = con.size()-1; i>0; i--)
{
for(j=0; j<i; j++)
{
if(con[j]>con[j+1])
{
typename V::value_type t;
//这里要保证vector元素类型的对象是可以判断大小以及支持赋值运算符操作的
//这里你设置的都是一些基本类型,所以不用考虑这个问题
//但是一旦你vector中存储的是自定义类型的数据,我说的这些就是必须要考虑的了
t = con[j];
con[j] = con[j+1];
con[j+1] = t;
}
}
}
for(iter = con.begin(); iter!=con.end(); iter++)
{
//这里也是一样的,自定义类型要重载这个标准输出流,基本类型可以不用考虑
cout<<(*iter)<<" ";
}
}
int TestMain()
{
cout<<"******用模板函数排序******"<<endl<<endl;
cout<<"请选择比较数据的类型:"<<endl<<"1:整型(int)"<<endl<<"2:双精度型(double)"<<endl<<"3:字符串型(string)"<<endl;
cout<<"请输入你的选择:";
int n;
cin>>n;
if(n==1)
{
cout<<"请输入你要比较的数据:"<<endl;
vector<int> vec1;
int val;
for(int i=0;;i++)
{
//你这个循环是死循环,要有一个控制输入的条件,自己选择吧
cin>>val;
//vector的最大好处是自动增长,但是你先前是没有给他分配空间的,所以直接[]操作是内存错误
vec1.push_back(val);
}
mySort(vec1);
}
else if(n==2)
{
cout<<"请输入你要比较的数据:"<<endl;
vector<double> vec2;
double val;
for(int i=0;;i++)
{
cin>>val;
vec2.push_back(val);
}
mySort(vec2);
}
else if(n==3)
{
cout<<"请输入你要比较的数据:"<<endl;
vector<string> vec3;
string str;
for(int i=0;;i++)
{
cin>>str;
vec3.push_back(str);
}
mySort(vec3);
}
system("pause");
return 0;
}