C++泛型编程——实现多功能多类型排序
内容
1.模板的基本概念
2.代码实现多功能排序
——————————————————————————————————————————————————
*1.模板
- 模板:建立通用的模具,大大提高复用性
- C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板;
- C++提供两种模板机制: 函数模板和类模板;
- 函数模板:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
- 该问题利用函数模板解决,
- 语法:
template <typename T>
- 解释:template — 声明创建模板;typename — 表面其后面的符号是一种数据类型,可以用class代替;T — 通用的数据类型,名称可以替换,通常为大写字母;
*2.代码演示
#include<stdio.h>
#include<stdlib.h>
#include<string>
struct Student {
int id;
char name[100];
int score;
};
void print1(int a[], int len) {
for (int i = 0; i < len; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
void print2(Student a[], int len) {
for (int i = 0; i < len; i++) {
printf("%d %s %d\t", a[i].id, a[i].name, a[i].score);
printf("\n");
}
}
template <typename T, typename C>
void bubbleSort(T a[], int len, C c ) {
for (int bound = 0; bound < len; bound++) {
for (int cur = len - 1; cur > bound; cur--) {
if ( c(a[cur-1],a[cur]) ==1 ){
T temp = a[cur - 1];
a[cur - 1] = a[cur];
a[cur] = temp;
}
}
}
}
//按照int型数据进行升序排列
int intAsce(int a, int b) {
return a > b ? 1 : 0;
}
//按照结构体数据进行降序排列
int strDesc(Student a, Student b) {
return a.id < b.id ? 1 : 0;
}
int main() {
int arr[] = { 2,4,5,3,6,1 };
int len1 = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, len1, intAsce);
print1(arr, len1);
Student stu[] = {
{2,"张三",68},
{1,"李四",87},
{4,"王五",90},
{3,"赵六",79}
};
int len2 = sizeof(stu) / sizeof(stu[0]);
bubbleSort(stu, len2, strDesc);
print2(stu, len2);
system("pause");
return 0;
}