第八课、泛型编程简介
一、数据结构的特点
1、专注于数据元素之间的关系
2、专注于特定结构之上的算法(如针对数组结构我们可以设计排序算法等等)
注:数据结构课程并不关心数据元素的具体类型
二、为学习数据结构选择合适的语言
1、由于数据结构并不关心具体的数据类型,故支持泛型编程的语言最适合和数据结构课程的学习
三、泛型编程的概念
1、不考虑具体数据类型的编程方式
void Swap(T& a, T& b) { T t=a; a=b; b=t; }
Swap算法中的T并不是一个具体的数据类型,而是泛指任意的数据类型
2、c++中的函数模板
(1)、是一种特殊的函数,可以用不同的类型进行调用
(2)、看起来和普通的函数很类似,两者的区别就是函数模板可参数化
template <typename T>//template 告诉编译器开始泛型编程,typename T告诉编译器T是一个泛指类型 void Swap(T& a, T& b) { T t=a; a=b; b=t; }
函数模板的调用方式:
自动类型推导调用
int a = 1; int b = 2; Swap (a,b);//自动推导
具体类型显示调用
float c = 0.01; float d = 0.02; Swap<float>(c, d);//显示调用
3、c++中的类模板
(1)、以相同的方式处理不同的类型
(2)、在类声明前使用template进行标识
(3)、<typename T>用来说明类中使用的泛指类型T
template <typename T> class Test { public: T Add(T a, T b); };
类模板的使用方式
(1)、只能显示指定具体类型,无法自动推导
(2)、定义对象就指定具体的类型
Test<int> t1;//定义对象时就显示指定类型 int ret = t1.Add(3, 5); //进行两个int类型数据的相加
四、小结
(1)、模板是泛型编程理论在c++中的实现
(2)、函数模板支持参数的自动推导和显示指定
(3)、类模板在使用时只能显示指定类型
(4)、类模板非常适用于编写数据结构相关的代码
本文作者:lgc202
本文链接:https://www.cnblogs.com/gui-lin/p/6815964.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步