STL模板的基礎與了解

2021-09-12 09:54:58 字數 2373 閱讀 6595

一·c++提供了模版的程式設計方法來解決程式設計問題,思路是:程式設計師先編號乙份「套路」**,然後在呼叫時編譯器根據呼叫時的引數

再為這種資料型別生成乙份屬於他的**

c語言中的快速排序:

二.模板的語法

template

t max(t num1,m num2)

a.模版的型別引數

t 被稱為模版的型別引數,可以叫任何名字,只是俗稱約定叫做t

它指的是函式呼叫時的任意型別的引數

雖然模版的型別可以是任意的,但是必須要支援模版函式中所使用到的運算子,模版不是萬能的,雖然能帶來好處

但也帶來了很多問題

b.函式模版的使用

1. 模版的例項化

編譯器不會把函式模版編譯成乙個例項,而是根據呼叫的引數在進行例項化(進一步生成二進位制指令)。

2. 使用模版時才例項化

模版只有在呼叫時才會例項化,因此模版編譯正確並不代表沒有問題,很多錯誤會產生在呼叫時

3. 二次編譯

第一次編譯是檢查模版的語法,第二次是根據引數把模版例項化出來,再檢查運算子是否支援這種型別。

下面是用模板實現的氣泡排序,能夠被所有資料型別呼叫

三.函式模版的隱式推斷

a. 使用函式模版時可以根據引數的型別來推斷模版的引數

b. 當函式模版不能通過函式呼叫時的引數來判斷模版函式是,可以使用《型別,型別........> 來明確指定

c.函式模版引數是可以有預設值的,

1. 預設值要優先放在右邊

2. c++標準才支援:-std=c++0x

四.函式模版與普通函式可以過載(特化)

1. 同一種格式的函式和函式模版是可以共生的,但是優先呼叫普通函式,但是可以有函式名後新增乙個空的<>指定呼叫函式模版

模版引數可以根據呼叫時的引數推斷

2. 普通函式在呼叫時可以進行型別提公升,但是這種提公升要低於模版的例項化;

3. 函式模版也可以進行型別提公升,但如果有乙個普通函式也可以進行型別提公升呼叫,那麼優先呼叫普通函式

五.類模組

a.類模版的語法

類模版的引數可以在類中當作型別使用,可以定義成員,返回值,引數等

template

class classname

注意:typename也可以繼續使用,但大多數用class以示區別

b.類模版的使用

類模版必須要經過例項化才能使用,也是需要經過兩次編譯,第一次是把類模版編譯成乙個「套路」,這個過程是未來檢查

語法,第二次是根據例項化引數,生成乙個類,然後才能使用這個類建立物件

使用類模版例項化乙個類:

classnamea;

c.類模版引數不支援隱式推斷,必須顯示例項化

d.靜態成員的定義

template int classname::num = 10;

靜態成員必須在類模版例項化後才被正真定義出來,每個例項化的類都有乙份靜態成員,這個例項化類建立出的

物件公用乙個靜態成員

e.遞迴例項化

classname> 物件

六.類模版的特化(過載)

特化:當類模版不能特殊的型別無法處理時,可以為這種特殊型別單獨例項化乙個類,這個單獨的實現叫做模版的特化

全類的特化:按照類的格式把類完整的實現一遍(重寫一遍)

template <> class classname 《返回值型別》

;成員特化:給制定型別提供乙個特殊的成員函式

template <> 返回值型別 classname《返回值型別》:max(void)

區域性特化:可以讓使用者根據例項化時的引數來指定所使用的類模版

同等程度的特化會產生二異性

七.類模版的引數

1. 類模版的引數可以有預設值

注意:使用類模版預設值時,<>必須加上,可以空著,但不能不寫

2. 類模版後面的引數可以呼叫前邊的引數

3. 普通數值可以對類模版進行例項化,它必須以類似變數的形式存在

注意:只能常量才能進行例項化,

posted @

2018-08-26 16:29

zlc1010 閱讀(

...)

編輯收藏

C 初級 模板基礎與STL概念

1.泛型程式設計 過載函式缺點 template typename t1,typename t2,typename tn t是型別 返回值型別 函式名 引數列表 例項 include using namespace std template typename t void swap t first,...

C 類 物件 模板與STL

類 乙個特殊的概念,再c 語言中是乙個新的資料型別,可以是對同一型別事物進行抽象處理,也可以是乙個層次結構中的不同層次節點。類的宣告與定義 類中的成員函式的定義方法 1.將類的成員函式都定義在類體內 2.將類的成員函式的實現放在類體外,但如果類成員函式定義在類體外,需要用到域運算子 當多個原始檔都引...

STL模板之vector與sort的使用

演算法學習 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績.都按先錄入排列在前的規則處理。例示 jack 70 peter 96 tom 70 smith 67 從高到低 成績 peter 96 jack 70 tom 70 smith 67 從低到高 成績 sm...