- 專一數據元素之間的關係
- 專一於特定結構之上的算法
數據結構課程並不關注數據元素的具體類型
。ios
問題:如何爲數據結構的學習選擇合適的語言
經驗分享:支持泛型編程的語言最適合數據結構課程的學習算法
- 不考慮具體數據類型的編程方式
對於Swap函數能夠考慮下面的泛型寫法編程
void Swap(T &a, T &b) { T t = a; a = b; b = t; }
Swap 泛型寫法中的T不是一個具體的數據類型,而是泛指任意的數據類型。數據結構
- 一種特殊的函數可用不一樣類型進行調用
- 看起來和普通函數很類似,區別是
類型可被參數
template <typename T> void Swap(T &a. T &b) { T t = a; a = b; b = t; }
- template 關鍵字用於聲明開始進行泛型編程
- typename 關鍵字用於聲明泛指類型
- 自動類型推導調用
- 具體類型顯示調用
int a = 0; int b = 0; Swap(a, b); // 自動推導 float c = 2; float d = 3; Swap<float>(c, d); // 顯示調用
#include <iostream> using namespace std; template <typename T> void Swap(T &a, T &b) { T t = a; a = b; b = a; } int main() { int a = 2; int b = 1; Swap(a, b); cout << "a = " << a << " " << "b = " << b << endl; double c = 0.01; double d = 0.02; cout << "c = " << c << " " << "d = " << d << endl; return 0; }
輸出:函數
a = 1 b = 1 c = 0.01 d = 0.02
- 以相同的方式處理不一樣的類型
- 在類聲明前使用 template 進行標識
- <typename T> 用於說明類中使用的泛指類型T
template <typename T> class Operator { public: T op(T a, T b); }
- 只能顯示指定具體類型,沒法自動推導
- 使用具體類型 <Type> 定義對象
Operator<int> op1; Operator<string> op2; int i = op1.op(1, 2); string s = op2.op("D.T", "Software");
#include <iostream> using namespace std; template <typename T> class Op { public: T process(T v) { return v * v; } }; int main() { Op<int> opInt; Op<double> opDouble; cout << "5 * 5 = " << opInt.process(5) << endl; cout << "0.3 * 0.3 = " << opDouble.process(0.3) << endl; return 0; }
輸出:學習
5 * 5 = 25 0.3 * 0.3 = 0.09
- 模板是泛型編程理論在C++中的實現
- 函數模板支持參數的自動推導和顯示指定
- 類模板在使用時只能顯示指定類型
- 類模板很是適用於編寫數據結構相關的代碼
以上內容整理於狄泰軟件學院系列課程,請你們保護原創!spa