(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...