C++使用自己的模板比较功能对数组进行排序
Sorting an array with own template compare function in C++
template <class T>
bool cmp(const T &a, const T &b){
return a <= b;
}
template <class T>
void bubble_sort(T tablica[], int size, bool compare(T,T)){
bool change = true;
while(change){
change = false;
for(int i=0; i < size-1; ++i){
if(compare(tablica[i+1], tablica[i])){
zamien(tablica[i+1], tablica[i]);
change = true;
}
}
}
}
它不起作用,我有错误:
'void bubble_sort(T [],int,bool (__cdecl *)(T,T))' :
could not deduce template argument for 'T []' from 'int [10]'
'void bubble_sort(T [],int,bool (__cdecl *)(T,T))' :
cannot use function template 'bool cmp(const T,const T)' as a function argument'
但是当我用它替换 CMP 函数时:
bool cmp(const int a, const int b){
return a <= b;
}
一切正常。如何更改我的 cmp 函数以使用模板?
问题是bubble_sort
期望的"比较"函数参数的类型是:
bool compare(T,T)
虽然"cmp"函数的类型是:
bool compare(const T&,const T&)
为了修复它,修改"compare"参数的类型:
template <class T>
void bubble_sort(T tablica[], int size, bool compare(const T&,const T&)){
/* ... */
}
这是我处理这个问题的方式:
int (*cmp_int)(int,int) = compare<int>;
bubble_sort(in, 5, cmp_int);
现在它应该在 MS 视觉中正常工作。
相关文章:
- 显示错误输出的简单数组排序程序
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- C 2D数组排序
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- CString 数组排序
- 简单的数组排序/检查 划分和征服版本
- C++ 中的多维数组排序
- 选择在++中对并行数组排序
- C++:二维指针数组排序:选择排序不适用于某些实例
- C++字符串数组排序
- C++中的指针数组排序算法
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 将索引数组排序为主数组
- 数组排序、数组输入、数组输出
- C++数组排序,内存错误
- 在嵌入式系统上将数组排序功能从c++移植到c
- 基于其他int数组排序
- 多维数组排序c++奇怪行为