当前课程知识点:C++语言程序设计进阶 > 第十章 泛型程序设计与C++标准模板库 > 泛型程序设计及STL的结构 > 泛型程序设计的基本概念
编写不依赖于具体数据类型的程序
将算法从特定的数据结构中抽象出来,成为通用的
C++的模板为泛型程序设计奠定了关键的基础
用来界定具备一定功能的数据类型。例如:
将“可以比大小的所有数据类型(有比较运算符)”这一概念记为Comparable
将“具有公有的复制构造函数并可以用‘=’赋值的数据类型”这一概念记为Assignable
将“可以比大小、具有公有的复制构造函数并可以用‘=’赋值的所有数据类型”这个概念记作Sortable
对于两个不同的概念A和B,如果概念A所需求的所有功能也是概念B所需求的功能,那么就说概念B是概念A的子概念。例如:
Sortable既是Comparable的子概念,也是Assignable的子概念
模型(model):符合一个概念的数据类型称为该概念的模型,例如:
int型是Comparable概念的模型。
静态数组类型不是Assignable概念的模型(无法用“=”给整个静态数组赋值)
很多STL的实现代码就是使用概念来命名模板参数的。
为概念赋予一个名称,并使用该名称作为模板参数名。
例如
表示insertionSort这样一个函数模板的原型:
template <class Sortable> void insertionSort(Sortable a[], int n);
大家好
欢迎回来继续学习
C++语言程序设计
现在我们首先来了解一下
泛型程序设计的一些基本概念
什么是泛型程序设计呢
其实泛型程序设计
就是将程序设计得尽量的通用
泛型程序设计呢
能够将算法与数据类型分离
也就是说
将算法从数据类型中抽象出来
使得算法成为通用的
能够适用于任何数据类型
C++的STL标准模板库
就是泛型程序设计的一个
很好的范例
首先呢我们来了解两个术语
一个是概念 一个是模型
我们用概念来界定
具备一定功能的数据类型
比如说
可以将
可以比较大小的所有数据类型
也就是有比较运算符的数据类型
这一概念记为Comparable
就是可比较的
将具有公有的复制构造函数
并且可以用赋值运算符的
这样的数据类型
这样的概念记为Assignable
就是可赋值的
还可以将可比较大小
并且具有公有复制构造函数
并且可以用赋值运算符的
所有数据类型这个概念
记作Sortable
对于两个不同的概念A和B
如果概念A所需求的所有功能
也是概念B所需求的功能
那么就可以说
概念B是概念A的子概念
比如说
我们刚才提到的这两个概念
Sortable
它既是Comparable的子概念
也是Assignable的子概念
模型呢
指的是
符合一个概念的数据类型
就可以称为该概念的模型
比如说int类型
就是Comparable概念的一个模型
静态数组类型
就不是Assignable概念的模型
因为对于静态数组
我们不能用赋值运算符
给整个数组进行赋值
实际上在STL库中
很多模板的实现
就是用概念来命名模板参数的
我们可以用概念来做模板参数名
也就是为概念赋予一个名称
并且使用这个名称
作为模板参数名
比如说insertionSort
这样一个函数模板的原型
它里面就用到了Sortale
这个概念作为参数
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义