注册 登录
编程论坛 C++教室

请高手指点本人在使用函数模板时的不解

naniah 发布于 2008-04-09 22:01, 550 次点击
#include<iostream>
#include<string>
using namespace std;
template<typename T>//模板声明
T swap(T a,T b ,T c)//定义一个通用的从大到小排列的通用函数
{
    T e;
    if(a<b)
    {
        e=a;
        a=b;
        b=e;
    }
    if(a<c)
    {
        e=a;
        a=c;
        c=e;
    }
    if(b<c)
    {
        e=b;
        b=c;
        c=e;
    }
    cout<<a<<"  "<<b<<" "<<c<<endl;
    return 0;
}
int main()
{
    swap(11.0,3.5,0.0);//调用模板函数(1)
    swap("aa","cc","bb");//调用模板函数(2)
    swap(2443,22,223);//调用模板函数(3)
    return 0;
}
/*          为什么调用(2)函数时,各字符串不进行排列呢?      */
7 回复
#2
sunkaidong2008-04-09 22:33
#include<iostream>
#include<string>
using namespace std;
template<typename T>//模板声明
void swap(T a[],int n )//定义一个通用的从大到小排列的通用函数
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n-1;j++)
            if(a[j]<a[j+1])
            {   T temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            };
   
    for( i=0;i<n;i++)
        cout<<a[i]<<"\t";
    cout<<endl;
   
}
int main()
{   float a[]={11.0,3.5,0.0};
    string b[]={"aa","cc","bb"};
    double c[]={2443,22,223};
    swap(a,sizeof(a)/sizeof(a[0]));//调用模板函数(1)
    swap(b,sizeof(b)/sizeof(b[0]));//调用模板函数(2)
    swap(c,sizeof(c)/sizeof(c[0]));//调用模板函数(3)
    return 0;
}
#3
sunkaidong2008-04-09 22:34
还是觉得你要把基础弄好...
#4
naniah2008-04-10 12:26
谢谢了
但是你能为我指点我编的为什么只对字符串不进行排列 对其他类型的数就能呢?
谢了!!
#5
leeco2008-04-10 12:33
你知道char * 和string有什么区别吗?
这两个类型的小于运算又是怎样的?
#6
sunkaidong2008-04-10 12:46
这个要看string有没有把<重载我的msdn可能老了..没找到...或者你可以自己写个类继承于string,用来实现对<重载
#7
xjywc2008-04-10 20:38
还是看看标准库的排序方法吧,虽然难,但是应该很有收获的
#8
sunkaidong2008-04-10 20:49
我觉得lz不急看标准库...sort()理解了用才好
1