STL與泛型程式設計 第一周筆記 Geekband

2022-05-08 10:15:12 字數 2346 閱讀 4944

簡單模板:

template< typename t > t function( t a, t b)

類模板:

template struct object;

函式模板

template< class t> inline t function( t a, t b)

不可以使用不同型別的引數來呼叫函式模板

可以使用class代替typename. 但不能使用struct代替typename

使用具體型別代替模板引數t叫例項化, 從而產生乙個模板例項.

模板編譯過程: 

實際編譯兩次

1,沒有例項化前,檢查模板**本身檢查是否有語法錯誤

2,例項化期間,檢查模板**的呼叫是否合法

模板編譯

1,型別必須嚴格符合,不可自動型別轉換.

2,如果真的要轉換,那麼需要使用static_cast< …>進行強制轉換.

函式模板過載

1, 模板函式可以像普通函式一樣被過載

2, 非模板函式可以和同名模板函式共存

3, 編譯器通過函式模板引數推導來決定使用哪個過載

其他因素相同的情況下,過載裁決過程呼叫非模板函式.

(否則編譯器還需要自己在例項化一套**)

max<>(7,32) 呼叫max允許空模板引數

max(2,3) 顯式指定模板實參型別

template < typename t, size_t n = 1024> class stack;

a,關鍵字 typename 和class 都可使用

b,在模板內, t可以像int,char一樣 定義成員變數和成員函式

c,除了copy constructor之外, 如果在類模板內需要使用到這個類本身,如定義operator=,那麼應該使用其完整定義(stack)

stack& operator=( stack < t,n> const & );

類模板的使用:

1,stack s;

2,stack< int,100> s;

1,stack< stack > s; 定義乙個stack的stack , 此處必須有乙個空格, 否則編譯器會以為是》操作符

template<>

class stack;

可能可以做些特別的優化或者提供不同的實現

避免在例項化某些類時,引起一些可能產生的詭異行為

主模板:

template< typename t1, typename t2> class myclass;

偏特化:

2 template< typename t> class myclass< t,t>;

3 template< typename t> class myclass< t,int>;

4 template< typename t1, typename t2> class myclass< t1*,t2*>;

如果有不止乙個偏特化同程度的能匹配某個呼叫,那麼該呼叫具有二義性,error.

如 :

myclass< int, int> obj; 滿足 myclass< t,t> 和 myclass< t,int>

myclass< int*, int*> obj; 滿足 myclass< t1*,t2* > 和 myclass< t,t>

template< typename t, typename tcons = std::vetor< t> > class stack;

除了 operator= ,其他操作符都可以被過載.

traits可以實現為模板類, 而關聯則是針對每個具體型別t的特化. 

traits實現: (函式定義)

template

< typename t>

typename simg< t >::returntype sigma ( const t const* start, const t const* end)

用於分離演算法和容器

智慧型指標

Boolan STL與泛型程式設計 第一周筆記

泛型程式設計 一 我們的目標 level 0 使用c 標準庫 level1 認識c 標準庫 胸中自由丘壑 level2 良好使用c 標準庫 level3 擴充c 標準庫 c standard library vs.standard template library stl 前者包含後者 c 標準庫的...

Boolan STL 第一周筆記

容器是用來儲存資料的,資料可以試使用者自定義的類,也可以試預定義的型別。c 中的容器主要使用有array vector list set map等。stl中的容器裡都有分配器,在宣告乙個容器的模板第二個引數就是分配器。分配器是用來給容器分配記憶體的,在一般情況下,使用預設的分配器即可。在stl中要實...

極客班STL與泛型程式設計 第一周學習筆記

續前節template簡單分類 模板是指允許函式或類 物件 通過泛型的形式進行表現或執行。對應不同的型別 types 都可以正常工作,而無需每個型別一套程式。例項化分為顯式例項化和隱式例項化,顯示例項化是指在 中明確指明使用哪種型別進行例項化,例如前節中complexc1 1.1,2.2 隱式例項化...