c++函数模板的问题 高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:37:40
template <typename Type,int size>
Type min(Type (&array1)[size]){
Type min_val=array1[0];
for(int i=1;i!=size,++i){
if(array1[i]<min_val)
min_val=array1[i];

}
return min_val;
}

#include<iostream>
using namespace std;
int main(){
int a[5]={10,3,4,7,0};
int i=min(a);
return 0;
}
int i=min(a) 这个语句报错

首先,你要知道,模板是需要泛化才能使用的。
除了楼上说的那个小问题之外,这里要改:
1.
Type min(Type array1[size]){

还有这里:
2.
int a[5]={10,3,4,7,0};
int i=min<int,5>(a);
就可以编译通过了。

不过,除此之外,我有一点疑问:
你是不是希望这个函数只能接受大小为泛化参数“5”的数组呢?
那这样你是做不到的,比如我这样用:
int a[6]={10,3,4,7,0,-1};
int i=min<int,5>(a);
编译通过,输出是0。
这样的设计结果是,无论你传的数组里有多少个元素,我只检查前面5个。
更有甚者,如果你这个数组里不够5个元素,一定会越界的。

原因是,参数传递时数组只传指针,不传大小,所以:
Type min(Type array1[size]){
完全等同与
Type min(Type *array1){
size没有起到约束作用。

应该是这样的:
template<typename T, size_t size>
class array {
public:
T elements[size];
};

template <typename T, size_t size>
T min(array<T,size> aArray){
T min_val=aArray.elements[0];

for(int i=1;i!=size;++i) {
if(aArray.elements[i]<min_val)
min_val=aArray.elements[i];
}
return min_val;
}