模板的彙總

2021-08-17 20:07:34 字數 2295 閱讀 1807

概念:

模板是泛型程式設計的基礎。所謂泛型程式設計就是編寫與型別無關的邏輯**,是一種復用的方式。模板分為模板函式和模板類。(例項化的時候才知道型別)

模板函式的書寫格式如下:

**template (模板必須先進行宣告)

返回型別 函式名(引數列表)

函式主體;

呼叫模板函式的過程就是例項化的過程!!!

**顯示呼叫模板例項化: 例如 swap(a,b); 如果不顯示呼叫,模板和已經寫好的都存在,不會呼叫模板函式。

**模板函式傳傳引用時候注意引數列表的對應。

如圖下,a1,b2的引用和指標不一樣,該函式的形參是引用,所以不能講實參轉換為指標型別,必須是同樣型別 int [ n ] 才能使用乙個模板引數,否則就匹配不到該模板函式。

非引用指標型別的,一唯陣列的型別都是int*。

**關於const;const和非const都可以傳給非const型別,但是非const型別不可以傳給const型別;

模板類:

**模板類呼叫的函式才會例項化(按需例項化)

**模板類的函式最好傳引用(因為模板類傳參拷備一次比普通類複雜很多)

**模板類名和型別不一樣;例如:類名: a  型別 a

**模板的引數:class t :型別模板引數(如int、char等) size_t n: 非型別的模板引數(常量)

類模板的模板引數只能傳一般的整形,浮點型、類型別不能傳。

模板的模板引數:(介面卡)

templete或templeteclass container=vector >

模板的特化:優先會呼叫特化的

模板的特化是在已定義的模板基礎之上,不能單獨存在。

特化的分類: 1>全特化:特化全部引數

用法示例:    templete

calss data

全特化 :       templete< >

class date

全特化後在類外定義類成員函式不需要再宣告模板,寫模板引數;

2>偏特化:(半特化)

①區域性特化某乙個引數;

②區域性特化某乙個引數為某個型別;

偏特化後要寫剩下的模板引數(未特化的);

用法示例:   

templete

calss data

偏特化第二個引數為int :

templete

class date

偏特化二個引數為指標型別 :

templete

class date

模板的型別萃取就是利用了模板的特化,來進行一部分的型別萃取呼叫。

模板的分離編譯:

為什麼模板不支援分離編譯?那麼該如何解決這個問題呢?

解決辦法:

1. 在模板標頭檔案 ***.h 裡面顯示例項化

模板類的定義後面新增  template class seqlist; 一般不推薦這種方法。

一方面老編譯器可能不支援,另一方面例項化依賴呼叫者。(不推薦)

2. 將宣告和定義放到乙個檔案 "***.hpp" 裡面,推薦使用這種方法。不要分離編譯

模板總結

優點:1. 模板復用了**,節省資源,更快的迭代開發,c++的標準模板庫(stl)因此而產生。

2. 增強了**的靈活性。

缺點:1. 模板讓**變得凌亂複雜,不易維護,編譯**時間變長。

2. 出現模板編譯錯誤時,錯誤資訊非常凌亂,不易定位錯誤。

演算法 模板彙總

邊,to ab邊的b點,next 指向下一條邊,w權重 int head n 每個ab邊的a點指向的第一條邊的編號 從1開始 void init void add int x,int y,int w 原理很簡單,就是每個點,後邊跟乙個邊,壓進去權重 節點等資訊。無向邊壓方向相反的兩次即可。struc...

揹包問題模板彙總

完全揹包 多重揹包 混合揹包 揹包問題 knapsack problem 是一種組合優化的np完全問題。它是在1978年由merkel和hellman提出的。問題的描述為 有乙個揹包,最多放m kg的物體 物體大小不限 有n個物體,每個物體的重量為wi,每個物體完全放入揹包後可獲得收益vi。問 如何...

MDPI latex模板使用問題彙總

mdpi的latex模板是有挺多不科學的問題嗯。若使用algorithmic模組製作演算法,會發現演算法行距太小 發生重疊,排版特別醜。解決方法 只需要在導言區加入 usepackage atbeginenvironment 參考issue 在導言區加入 preto 去掉行號 參考 mdpi的aux...