第八课、泛型编程简介

一、数据结构的特点

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)、类模板非常适用于编写数据结构相关的代码

时间: 2024-10-10 07:16:19

第八课、泛型编程简介的相关文章

第8课 - 泛型编程简介

如果遗忘了函数模板和类模板,请复习之前的c++随笔对应章节.

【C++探索之旅】第一部分第八课:传值引用,文件源头

内容简介 1.第一部分第八课:传值引用,文件源头 2.第一部分第九课预告:数组威武,动静合一 传值引用,文件源头 这一课的标题有点怪.其实是由这一课的几个重点内容结合起来取的名,慢慢学习就知道啦. 上一课<[C++探索之旅]第一部分第七课:函数效应,分而治之>中,我们初步认识了函数. 不过不要高兴得太早,你以为函数就这样离你远去了嘛?怎么可能,函数将伴随一生好吗,只要你继续编程的话.哈哈,所以你是跑不掉了~ [小编,都跟你签了协议了,没吃药不要随便出来溜达] 这一课我们就继续深入学习与函数相关

【Linux探索之旅】第二部分第八课:RTFM 阅读那该死的手册

内容简介 1.第二部分第八课:RTFM 阅读那该死的手册 2.第二部分第九课预告:查找文件,无所遁形 RTFM 阅读那该死的手册 今天这一课也会很轻松. 一般Windows的用户不太习惯看使用手册.有些Windows下的软件下载后是带有使用手册的,但是谁会花时间看呢? 在Linux下,阅读手册应该成为一个反射动作,一个自然而然的反应.虽说一开始要我们去看手册会有点让人生畏,但是我们学习各种Linux命令的使用方法的最好去处就是手册了. 我们这个系列教程也绝不能和手册相比,因为我们的教程里对于每一

【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

? 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文

【C语言探索之旅】 第二部分第八课:动态分配

内容简介 1.课程大纲 2.第二部分第八课: 动态分配 3.第二部分第九课预告: 实战"悬挂小人"游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己

[译文]JOAL教程 第八课 OggVorbis格式流

[译文]JOAL教程 原文地址:http://jogamp.org/joal-demos/www/devmaster/lesson8.html 原文作者:Athomas Goldberg 译文:三向板砖 转载请保留以上信息. 这是JOAL教程系列的最后一节,学习笔记:http://blog.csdn.net/shuzhe66/article/details/40583771 我十分建议您在阅读完本文后参考学习笔记内容,这节的问题非常多. 第八课OggVorbis格式流 本文是DevMaster.

第八课 网络通信

unix_c_08.txt================第八课 网络通信================一.基本概念------------1. ISO/OSI七层网络协议模型~~~~~~~~~~~~~~~~~~~~~~~~~~+------------+--------------+ ---| 应用层 | Application | ^+------------+--------------+ || 表示层 | Presentation | 高层+------------+---------

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

NeHe OpenGL教程 第二十八课:贝塞尔曲面

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十八课:贝塞尔曲面 贝塞尔曲面: 这是一课关于数学运算的,没有别的内容了.来,有信心就看看它吧. 贝塞尔曲面 作者: David Nikdel ( [email protected] ) 这篇教程旨在介绍贝塞尔曲面,希望有比我更

NeHe OpenGL教程 第十八课:二次几何体

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十八课:二次几何体 二次几何体: 利用二次几何体,你可以很容易的创建球,圆盘,圆柱和圆锥. 二次曲面是一种画复合对象的方法,这种方法通常并不需要很多的三角形.我们将要使用第七课的代码.我们将要增加7个变量以及修改纹理以增加一些变化