(1)開始看模板 啦

2021-10-05 12:48:55 字數 2066 閱讀 2156

(ps:大佬自動跳過,本文是作為乙個入門級選手的個人理解,針對剛開始學習的朋友們 ~ 0 ~)

建立通用模具,將型別引數化,提高程式的復用性
函式模板、類模板
通用不具有萬能性 :例如陣列、自定義資料型別的直接賦值問題 

解決: c++為解決這一問題提供模板過載,可以為這些特定的資料型別提供具體化的模板

目的: 利用具體化的模板可以解決自定義型別的通用化,但模板的學習並不是為了寫模板,而是為了在stl能夠運用系統提供的模板

利用關鍵字template,建立乙個通用函式,此函式不能直接使用,

只是乙個框架,其形參和返回值型別可以不具體定製,可以用乙個虛擬型別代替

template 函式宣告或定義(只能寫乙個)
template   表明建立模板

typename 表明其後的符號是一種資料型別,可以用 class 代替

t 通用資料型別,名稱可以替換,常用大寫字母表示

注意:

(template< typename t >與template< class t >

一般情況下這兩個通用,但有乙個特例,就是當 t 是乙個類,而這個類又有子類(假設名innerclass 時,應該用 template< typename >)

1.自動型別推導

2.顯式指定型別

1.自動資料型別推導,必須推導出一致的資料型別t,才能使用

2.模板必須要確定出t的資料型別才能使用

*/

== 理論轉化為實踐如下==

//

#include

using

namespace std;

template

<

typename t>

//宣告乙個模板,告訴編譯器**後面緊跟的t不要報錯,t是乙個通用資料型別

void

myswap

(t &a,t &b)

template

<

class

t>

voidsu(

)template

<

typename t,

typename g>

void

sg(t a,g b)

void

test1()

///侷限性體現:若 a , b 是兩個陣列或自定義的資料型別,該操作無法實現

template

<

typename t>

void

similar

(t a, t b)

class

person};

//利用具體化person版本實現**,具體化優先呼叫

template

<

>

void

similar

(person a, person b)

void

test3()

///

//簡單案例實現:陣列排序

template

<

typename t>

void

arysort

(t arr,

int len)

if(min != i)}}

template

<

class

t>

void

print

(t a,

int len)

void

test2()

;arysort

(a,5);

arysort

(b,9);

print

(a,5);

print

(b,9);

}//

intmain()

開始寫部落格啦

本來在c 部落格網上註冊了一下並寫了幾篇日誌,後來發現那個實在是人氣不旺啊,比不過csdn.而且介面實在是太寒酸了 哎,於是把前幾天寫的文章都轉移到這裡了.不過不管在哪兒寫部落格,能不能堅持下去才是最關鍵的問題。這一周真是太倒霉了 周一本來想好好做一次螢光實驗,結果不小心 不太清楚是哪兒出了問題,可...

開始做些事情啦

六月底處理完爺爺去世的事情,回家考完最後兩門駕照考試,就回去學習暑假學習。在暑假結束,回到了自己的學校,正準備去實驗室呆呆的時候 突然傳來了乙個訊息 看到這個訊息我的內心凌亂了,心裡的第一反應是羞恥緊接著是憤怒,因為自己居然被實驗室踢掉了,其次是因為我也沒有不在做專案,實驗室也是因為乙個學妹佔據了我...

CSDN之旅開始啦

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...