【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介
学习交流加
- 个人qq:
1126137994- 个人微信:
liu1126137994- 学习交流资源分享qq群:
962535112
今天开始系统性学习数据结构内容,之前也看过大话数据结构这本书,对大多数概念以及数据结构都有一定的了解,但是就是没有自己亲自去实现它的代码。
今天开始,用C++语言从0编写数据结构所有的代码实现,学习的编程工具为QT。也希望同道中人可以加q:1126137994.共同学习进步。
今天第一次先不讲数据结构的知识,先告诉大家为什么用C++语言来学习数据结构。
为什么用C++语言来学习数据结构呢?
首先我们来看一下数据结构的特点:
-专注于数据元素之间的关系
-专注于特定结构之上得算法
我们发现数据结构并不关注数据元素的具体类型。既然它不关注数据元素的具体类型,那么泛型编程,再适不过了。那么什么是泛型编程呢?
泛型编程的概念:不考虑具体数据类型的编程方式。
举个例子:
对于Swap函数,可以考虑下面的泛型写法
void Swap(T& a,T& b)
{T t = a;a = b;b = t;
}
Swap泛型写法中的T,不是一个具体的数据类型,而是泛指任意的数据类型。
学过C++语言的应该就会发现,C++中的模板技术,不就是泛型编程么?
C++中的函数模板:
-一种特殊的函数可用不同类型进行调用
-看起来和普通函数类似,区别是类型可被参数化。
函数模板的语法法则:
*template关键字用于声明开始进行泛型编程
*typename关键字用于声明泛指类型
类模板的语法法则:
*以相同的方式处理不同的类型
*在类声明前使用template关键字进行标识
*<typename T>
用于说明类中使用的泛指类型T
例如:
template <typename T>
class Operator
{
public:T op(T a, T b);
};
如何使用模板?
1.函数模板的使用
-自动类型推倒调用
-具体类型显示调用
例如:
int a = 0;
int b = 1;
Swap(a, b); //自动推倒数据类型
float c = 0.1;
float d = 0.2;
Swap<float>(c, d); //显示的调用具体的数据类型
2.类模板的使用
-只能显示指定具体的数据类型,无法自动推倒
-使用具体类型<type>
定义对象
例如:
Operator<int> op1;
Operator<string> op2;int i = op1.op(1, 2);
string s = op2.op("lyy", "C++");
下面看一个完整的代码:
#include <iostream>using namespace std;template<typename T> //开始函数的泛型编程
void Swap(T& a,T& b)
{T t = a;a = b;b = t;
}template <typename T> //开始类的泛型编程
class Op
{
public:T process(T v){return v * v;}
};int main()
{int a = 1;int b = 2;Swap(a,b); //函数的模板的调用,可以自动识别数据类型cout << "a=" << a << " " << "b=" << b << endl;double c = 0.01;double d = 0.02;Swap<double>(c,d); //函数的模板的调用,显示指定数据类型cout << "c=" << c << " " << "d=" << d << endl;Op<int> opInt; //类定义对象时,必须加<type>特定的类型定义Op<double> opDouble; //类定义对象时,必须加<type>特定的类型定义cout << "5*5 = " << opInt.process(5) << endl;cout << "0.3*0.3 = " << opDouble.process(0.3) << endl;return 0;
}
在QT上运行的结果为:
总结:
-模板是泛型编程理论在C++的实现
-函数模板支持参数的自动推倒和显示指定
-类模板在使用时只能显示的指定类型
-类模板非常适用于编写数据结构相关的代码
想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。
【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介相关推荐
- 【数据结构学习之完全从零实现所有数据结构的代码编写之二】智能指针
今天我们依然暂时不讲解数据结构里面的内容,我们来复习一下昨天学的模板技术用于数据结构编程的思想,给出一个模板技术的实例:智能指针的应用.喜欢看我分享的加我q:1126137994 加我共同学习交流各种 ...
- Qt5 学习之路及嵌入式开发教程4:代码编写实现信号槽例子
Qt5 学习之路及嵌入式开发教程4:代码编写实现信号槽例子 整体设计思路: 第一步:先设置整体界面控件的位置及大小: 第二步:添加代码,实现信号槽功能: 第三步:调试运行程序,实现程序功能. 一.整体 ...
- 数据结构学习笔记(参考书籍:大话数据结构和CSDN)
有些解释内容为搬运,如有侵权,联系删除!!! 数据结构 线性表 顺序存储 优点:无须为表中元素之间的逻辑关系而增加额外的存储空间:可以快速的存取表中任一位置的元素. 缺点:插入和删除操作需要移动大量元 ...
- 数据结构学习笔记(一)——《大话数据结构》
第一章 数据结构绪论 基本概念和术语 数据 描述客观事物的符号,计算机中可以操作的对象,能被计算机识别并输入给计算机处理的符号的集合.包括整型.实型等数值类型和字符.声音.图像.视频等非数值类型. 数 ...
- C语言数据结构学习用单元测试
药物名称: C语言数据结构学习用单元测试 主治: 本品是基于CUnit编写的.全部的.纯C的数据结构(ADT)各种实现的单元测试.主治基础不牢,水品增长缓慢.建议配合严蔚敏<数据结构>(C ...
- 数据结构学习笔记(七):哈希表(Hash Table)
目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...
- 算法与数据结构学习路线
随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域. 其中,算法工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,初学者该如何学好算法呢? 算法 ...
- 数据结构学习笔记(3-5):树
附录:所有blog的链接 数据结构学习笔记(1):基本概念 数据结构学习笔记(2):线性结构 数据结构学习笔记(3-5):树 数据结构学习笔记(6-8):图 数据结构学习笔记(9-10):排序 数据结 ...
- 数据结构绪论、线性表——从零起步的数据结构学习日志1【极客BOY-米奇】
文章目录 前言(转载请说明作者:极客BOY) 什么是数据结构? 一些名词简称 数据结构的体系 线性结构 线性结构的基本特征 线性表 线性表是一种最简单的线性结构 线性表的类型定义 抽象数据类型线性表( ...
最新文章
- 数字图像处理实验(15):PROJECT 06-02,Pseudo-Color Image Processing
- Hadoop之HDFS面试知识复习
- 【AngularJS学习笔记】Java Script use strict 严格模式
- 微软:Win11很受欢迎、正式版将于秋季如期发布
- matplotlib设置画布大小_PyTorch 49.matplotlib模块
- inline元素的间距问题
- MultiMedia eXtensions - MMX:第一套应用于英特尔 80x86 指令集的 SIMD 扩展
- shell if判断语句
- Netty工作笔记0025---SocketChannel API
- 常见面试算法:回归、岭回归、局部加权回归
- nginx访问控制allow、deny(ngx_http_access_module)
- Qt_QTableWidget 详解 最全用法 网格线样式 最后一列自拉伸
- 周信静-从职高到MIT计算机博士录取
- markdown: 欢迎使用马克飞象
- Html中几种特别分割线特效
- 仿瑞吉外卖 【手机登陆功能换成邮件登陆】
- DRN: A Deep Reinforcement Learning Framework for News Recommendation学习
- idea debug教程启用Debug模式可以分析定位异常发生的位置
- 解决TIM版无法修改个人文件夹位置
- 代理插件SwitchyOmega安装配置