template<class>的问题

#include<iostream>
using namespace std;
template<class elemtype>
void print(elemtype list[],int length);
//1.elemtype做为一个名称为什么可以定义list[](为什么不是int或class之类的)
//2.为什么此处要明确数值 我记得如果是数组的话可以直接(int[],int)
template<class elemtype>
void bubblesort(elemtype list[],int length);
int main()
{
int intlist[]={2,56,34,25,73,46,89,10,5,16};
cout<<"before sorting,intlist:";
print(intlist,10);
cout<<endl;
bubblesort(intlist,10);
cout<<"after sorting,intlist:";
print(intlist,10);
return 0;
}
template<class elemtype>
void print(elemtype list[],int length)
{
for(int i=0;i<length;i++)
cout<<list[i]<<" ";
cout<<endl;
}
template<class elemtype>
void bubblesort(elemtype list[],int length)
{
for(int a=1;a<length;a++)
{
for(int b=0;b<length-a;b++)
{
if(list[b]>list[b+1])
{
elemtype temp=list[b];
list[b]=list[b+1];
list[b+1]=temp;
}
}
}
}
回一楼 elemtype是名称 比如可以变成asdf什么的 或者你的意思是代表了class?

第1个回答  2008-04-04
1. elemtype不是名称,而是类型。比如int,char, 或者是自定义的结构体或类
2. 若并非动态分配的(new、malloc)则可通过sizeof(list)/sizeof(elemtype)获得数量。但请注意用在这里并不合适,因为作为函数参数的数组会退化为指针,所以在32位机上sizeof(list) = 4。所以要明确数值,否则就会出错。
第2个回答  2008-04-05
兄弟,class只是一个代表类型定义的符号,elemtype才是类型的名称。
学模板,认真看看相关的资料!

template<class elemtype>
template是C++中的模板,就是可以范化类型。
template<class elemtype> 中elemtype就是范化了的类型的名称,就相当于int一样,可以定义变量。

具体模板的内容,可以参考下面资料。

参考资料:http://babylindacjwpisces.spaces.live.com/blog/cns!79f2c469a939181b!232.entry

第3个回答  推荐于2018-04-13
1.elemtype在这里只是一个代表数据类型(内置的或用户定义的)的代名词.编译器编译代码时会根据实际传入的数组元素的类型生成相应的函数.比如
int intlist[]={2,56,34,25,73,46,89,10,5,16};
...
bubblesort(intlist,10); //这里调用这个模板函数,编译器根据模板自动生成了void bubblesort(int list[],int length)这样一个函数,在该函数的实现中,所有出现elemtype的地方全部用int代替.

2.对于数组,我们没有办法知道它的元素的个数(否则就不会存在数组越界的问题了).例如该例中,代码中写intlist,编译器是没办法知道这个数组就有10元素.当一个函数必须知道数组的大小时,只能通过参数传入这个数组的大小.本回答被提问者和网友采纳
相似回答