15,440
社区成员
发帖
与我相关
我的任务
分享
template<typename T>
T max_r(T (&arr)[],int size,bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){
//...
}
[Error] parameter 'arr' includes reference to array of unknown bound 'T []'
template<typename T>
T min_v(T arr[],int size,bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){
T min_value=arr[0];
for(int i=1;i<size;++i){
if(arr[i]>min_value) min_value=arr[i];
}
return min_value;
}
可以成立呢?编译器不会报错。
[/quote]
我说的引用需要指明数组的维度, 你这个不是引用的吗!
没有通过引用的时候, 数组参数是退化成指针的, T arr[] 等价于 T* arrtemplate<typename T,int size>
T& max_r(T (&arr)[size],bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){
T max_value=arr[0],max_number=0;
for(int i=1;i<size;++i){
if(compare_func_is_x_less_than_y(max_value,arr[i])) max_value=arr[i],max_number=i;
}
return arr[max_number];
}
template<typename T,int size>
T& max_r(T (&arr)[size],bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){ //刚才代码中少了一个&,补上
T max_value=arr[0],max_number=0;
for(int i=1;i<size;++i){
if(arr[i]>max_value) max_value=arr[i],max_number=i;
}
return arr[max_number];
}
template<typename T>
T min_v(T arr[],int size,bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){
T min_value=arr[0];
for(int i=1;i<size;++i){
if(arr[i]>min_value) min_value=arr[i];
}
return min_value;
}
可以成立呢?编译器不会报错。template<typename T,int size>
T max_r(T (&arr)[size],bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){
T max_value=arr[0],max_number=0;
for(int i=1;i<size;++i){
if(arr[i]>max_value) max_value=arr[i],max_number=i;
}
return arr[max_number];
}
谢谢
template<typename T, int SIZE>
T max_r(T (&arr)[SIZE],bool(*compare_func_if_x_less_than_y)(T,T)=[](T x,T y)->bool{return x<y;}){
//...
}
#include <stdio.h>
#include <algorithm>
template<typename T, int N, typename Pred = std::less<T> >
T max_r(T (&arr)[N], Pred pred = std::less<T>())
{
T max = arr[0];
for (int i = 1; i < N; ++i)
{
if (pred(max, arr[i]))
{
max = arr[i];
}
}
return max;
}
int main(int argc, char **argv)
{
int a[] = { 1, 2, 3, 10, 4, 5 };
printf("%d\n", max_r(a));
}