【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介
學習交流加
- 個人qq:
1126137994 - 個人微信:
liu1126137994 - 學習交流資源分享qq群:
962535112
今天開始系統性學習數據結構內容,之前也看過大話數據結構這本書,對大多數概念以及數據結構都有一定的了解,但是就是沒有自己親自去實現它的代碼。
今天開始,用C++語言從0編寫數據結構所有的代碼實現,學習的編程工具為QT。也希望同道中人可以加q:1126137994.共同學習進步。
今天第一次先不講數據結構的知識,先告訴大家為什么用C++語言來學習數據結構。
為什么用C++語言來學習數據結構呢?
首先我們來看一下數據結構的特點:
-專注于數據元素之間的關系
-專注于特定結構之上得算法
我們發現數據結構并不關注數據元素的具體類型。既然它不關注數據元素的具體類型,那么泛型編程,再適不過了。那么什么是泛型編程呢?
泛型編程的概念:不考慮具體數據類型的編程方式。
舉個例子:
對于Swap函數,可以考慮下面的泛型寫法
Swap泛型寫法中的T,不是一個具體的數據類型,而是泛指任意的數據類型。
學過C++語言的應該就會發現,C++中的模板技術,不就是泛型編程么?
C++中的函數模板:
-一種特殊的函數可用不同類型進行調用
-看起來和普通函數類似,區別是類型可被參數化。
函數模板的語法法則:
*template關鍵字用于聲明開始進行泛型編程
*typename關鍵字用于聲明泛指類型
類模板的語法法則:
*以相同的方式處理不同的類型
*在類聲明前使用template關鍵字進行標識
*<typename T>用于說明類中使用的泛指類型T
例如:
如何使用模板?
1.函數模板的使用
-自動類型推倒調用
-具體類型顯示調用
例如:
2.類模板的使用
-只能顯示指定具體的數據類型,無法自動推倒
-使用具體類型<type>定義對象
例如:
下面看一個完整的代碼:
#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語言,數據結構等技術問題。
總結
以上是生活随笔為你收集整理的【数据结构学习之完全从零实现所有数据结构的代码编写之一】泛型编程简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vivado2018使用教程
- 下一篇: 【OS学习笔记】六 实模式:编写主引导扇