C++——模板:实现泛型编程(数组排序多功能函数)

C++泛型编程——实现多功能多类型排序

内容

1.模板的基本概念
2.代码实现多功能排序
——————————————————————————————————————————————————

*1.模板

  • 模板:建立通用的模具,大大提高复用性
  • C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板;
  • C++提供两种模板机制: 函数模板和类模板;
  • 函数模板:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
  • 该问题利用函数模板解决,
  • 语法:
template <typename T>
  • 解释:template — 声明创建模板;typename — 表面其后面的符号是一种数据类型,可以用class代替;T — 通用的数据类型,名称可以替换,通常为大写字母;

*2.代码演示

#include
#include
#include

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;
}

C++——模板:实现泛型编程(数组排序多功能函数)_第1张图片

你可能感兴趣的:(自学C++,c++,排序算法,c++泛型算法,编程语言)