博客
关于我
03模板学习之函数模板案例-写一个int,char通用的冒泡
阅读量:217 次
发布时间:2019-03-01

本文共 1946 字,大约阅读时间需要 6 分钟。

03模板学习之函数模板案例-写一个int,char通用的冒泡

直接看代码

// 模板测试.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include        template          void MySort(Sort *arr, int len) {   	if (arr == NULL) {   		return;	}	for (int i = 0; i < len; i++) {   		for (int j = i; j < len - 1; j++) {   			if (arr[j] > arr[j + 1]) {   				Sort tmp = arr[j];				arr[j] = arr[j + 1];				arr[j + 1] = tmp;			}		}	}}template            void Printf(T *arr, int len) {   	for (auto i = 0; i < len; i++) {   		std::cout << arr[i] << " ";	}	std::cout<       

在这个例子中,我们可以看到一个通用的冒泡排序实现,它支持任意可比较的类型(比如int和char)。通过模板化设计,这个函数能够适用于不同类型的数组排序,极大地提高了代码的复用性和可读性。

首先,我们来看一下代码的核心部分。模板函数MySort接受一个指针类型的数组和长度作为参数。它首先检查数组是否为空,如果为空则直接返回。如果数组不为空,则执行冒泡排序算法。具体来说,这个算法通过双重循环实现,每次比较相邻元素并进行交换,直到数组排序完成。

与传统的冒泡排序相比,这个模板化的实现具有以下优势:

  • 代码复用性: 通过使用模板,我们可以避免重复编写不同类型(如int和char)的排序函数。
  • 可读性: 模板化的代码更容易理解和维护,因为它明确地展示了算法的结构和功能。
  • 灵活性: 模板可以支持任意可比较的类型,这使得代码在不同场景下更加适用。

接下来,我们可以看一下代码的具体实现。首先,模板函数MySort定义为:

```cpptemplate
void MySort(sort *arr, int len) { if (arr == NULL) { return; } for (int i = 0; i < len; i++) { for (int j = i; j < len - 1; j++) { if (arr[j] > arr[j + 1]) { sort tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } }}```

这个函数首先检查输入数组是否为NULL,如果是则直接返回。然后通过外层循环遍历数组,内层循环对相邻元素进行比较和交换,最终完成排序。

另外,我们还定义了一个Printf模板函数,用于打印不同类型的数组:

```cpptemplate
void Printf(t *arr, int len) { for (auto i = 0; i < len; i++) { std::cout << arr[i] << " "; } std::cout << std::endl;}```

这个函数根据模板参数t的类型,正确地打印数组中的元素。例如,当t是int时,它会输出整数;当t是char时,它会输出字符。

在主函数中,我们首先定义了一个整数数组a和一个字符数组c。然后通过MySort函数对它们进行排序,并使用Printf函数打印输出:

```cppint a[] = { 1, 5, 7, 4, 6, 9 };int len = sizeof(a) / sizeof(int);printf(a, len);

char c[] = { 'a', 'c', 'b', 'r', 'd' };int clen = sizeof(c) / sizeof(char);printf(c, clen);

通过上述代码,我们可以看到模板函数的实际应用。无论是整数数组还是字符数组,MySort和Printf函数都能正确地处理它们,实现通用的冒泡排序和打印功能。

最后,我们可以看到代码的运行结果。通过在控制台中执行该程序,我们可以看到排序前后的数组内容,验证代码的正确性。

总的来说,这个模板化的实现方法具有很强的扩展性和灵活性。通过定义通用的模板函数,我们可以显著地降低代码的维护成本,并提高代码的可读性和复用性。这对于处理不同类型的数据排序问题尤为重要。

转载地址:http://hnfv.baihongyu.com/

你可能感兴趣的文章
NYOJ 1066 CO-PRIME(数论)
查看>>
NYOJ 737:石子合并(一)(区间dp)
查看>>
nyoj 91 阶乘之和(贪心)
查看>>
nyoj------203三国志
查看>>
NYOJ-525 一道水题
查看>>
nyoj58 最少步数
查看>>
N皇后问题
查看>>
N皇后问题
查看>>
OAuth 2.0 MAC Tokens
查看>>
OAuth 及 移动端鉴权调研
查看>>
OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
查看>>
OAuth2 Provider 项目常见问题解决方案
查看>>
OAuth2 vs JWT,到底怎么选?
查看>>
Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>
OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
查看>>
OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
查看>>
OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
查看>>
OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
查看>>
OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
查看>>