学习交流加

  • 个人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语言,数据结构等技术问题。

【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介相关推荐

  1. 【数据结构学习之完全从零实现所有数据结构的代码编写之二】智能指针

    今天我们依然暂时不讲解数据结构里面的内容,我们来复习一下昨天学的模板技术用于数据结构编程的思想,给出一个模板技术的实例:智能指针的应用.喜欢看我分享的加我q:1126137994 加我共同学习交流各种 ...

  2. Qt5 学习之路及嵌入式开发教程4:代码编写实现信号槽例子

    Qt5 学习之路及嵌入式开发教程4:代码编写实现信号槽例子 整体设计思路: 第一步:先设置整体界面控件的位置及大小: 第二步:添加代码,实现信号槽功能: 第三步:调试运行程序,实现程序功能. 一.整体 ...

  3. 数据结构学习笔记(参考书籍:大话数据结构和CSDN)

    有些解释内容为搬运,如有侵权,联系删除!!! 数据结构 线性表 顺序存储 优点:无须为表中元素之间的逻辑关系而增加额外的存储空间:可以快速的存取表中任一位置的元素. 缺点:插入和删除操作需要移动大量元 ...

  4. 数据结构学习笔记(一)——《大话数据结构》

    第一章 数据结构绪论 基本概念和术语 数据 描述客观事物的符号,计算机中可以操作的对象,能被计算机识别并输入给计算机处理的符号的集合.包括整型.实型等数值类型和字符.声音.图像.视频等非数值类型. 数 ...

  5. C语言数据结构学习用单元测试

    药物名称: C语言数据结构学习用单元测试 主治: 本品是基于CUnit编写的.全部的.纯C的数据结构(ADT)各种实现的单元测试.主治基础不牢,水品增长缓慢.建议配合严蔚敏<数据结构>(C ...

  6. 数据结构学习笔记(七):哈希表(Hash Table)

    目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...

  7. 算法与数据结构学习路线

    随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域. 其中,算法工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,初学者该如何学好算法呢? 算法 ...

  8. 数据结构学习笔记(3-5):树

    附录:所有blog的链接 数据结构学习笔记(1):基本概念 数据结构学习笔记(2):线性结构 数据结构学习笔记(3-5):树 数据结构学习笔记(6-8):图 数据结构学习笔记(9-10):排序 数据结 ...

  9. 数据结构绪论、线性表——从零起步的数据结构学习日志1【极客BOY-米奇】

    文章目录 前言(转载请说明作者:极客BOY) 什么是数据结构? 一些名词简称 数据结构的体系 线性结构 线性结构的基本特征 线性表 线性表是一种最简单的线性结构 线性表的类型定义 抽象数据类型线性表( ...

最新文章

  1. 数字图像处理实验(15):PROJECT 06-02,Pseudo-Color Image Processing
  2. Hadoop之HDFS面试知识复习
  3. 【AngularJS学习笔记】Java Script use strict 严格模式
  4. 微软:Win11很受欢迎、正式版将于秋季如期发布
  5. matplotlib设置画布大小_PyTorch 49.matplotlib模块
  6. inline元素的间距问题
  7. MultiMedia eXtensions - MMX:第一套应用于英特尔 80x86 指令集的 SIMD 扩展
  8. shell if判断语句
  9. Netty工作笔记0025---SocketChannel API
  10. 常见面试算法:回归、岭回归、局部加权回归
  11. nginx访问控制allow、deny(ngx_http_access_module)
  12. Qt_QTableWidget 详解 最全用法 网格线样式 最后一列自拉伸
  13. 周信静-从职高到MIT计算机博士录取
  14. markdown: 欢迎使用马克飞象
  15. Html中几种特别分割线特效
  16. 仿瑞吉外卖 【手机登陆功能换成邮件登陆】
  17. DRN: A Deep Reinforcement Learning Framework for News Recommendation学习
  18. idea debug教程启用Debug模式可以分析定位异常发生的位置
  19. 解决TIM版无法修改个人文件夹位置
  20. 代理插件SwitchyOmega安装配置

热门文章

  1. oracle中错位函数,Oracle中的一些函数
  2. Element-UI中关于table表格的那些骚操作
  3. CSS之基于视窗单位的排版
  4. .Net Core下基于Emit的打造AOP
  5. 2019.02.09 bzoj4455: [Zjoi2016]小星星(容斥原理+dp)
  6. mysql数据库的设计
  7. iview-cli 采坑记录
  8. Python 开篇及第一个Python程序
  9. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)
  10. rip c语言,GNU C 对标准C语言的扩展