c 學習筆記 模板與標準模板庫(一)

2021-07-31 06:55:02 字數 2720 閱讀 6142

**出處:

有時候在設計程式的時候會遇到這樣一種情況:需要設計的幾個類,其功能都是一樣的,僅僅只是需要操作的資料型別不同。遇到這樣的情況,固然可以將所有的類都設計一遍,但是在c++中,我們有更好的方法:設計乙個模板類。假設我們需要建立乙個陣列類,該陣列可能是整型陣列,也可能是double型別陣列、string型別陣列等,為此我們需要設計乙個陣列的模板類。

template< class t >

class array

~array();

private:

array(){};

int length;

t * num;

};template < class t >

array< t >::array( int n )

template < class t >

array< t >::~array()

template< class t >

t & array< t > ::operator (int i)

template< class t >

const t & array< t > ::operator (int i) const

template< class t >

ostream & operator<<(ostream & out, const array & a)

template< class t >

該語句稱為

模板頭,可以單獨放在一行,也可以與後面的class array同放在一行,這都沒有關係。模板頭中的「t」我們稱之為

類引數,類引數表示將會以確定的資料型別替代之,任何有效的c++識別符號均可以作為類引數,當然通常我們還是會用「t」來做類引數。

類模板是對類的抽象 目的是為了實現**重用 對那些設計**的過程實現步驟基本一樣 的相似的類 抽象出來 到用的時候再傳具體的類

注意區別:

類外:

template < class t >

t & array< t >::array( int n )

類內:

array( int n )

模板類至少有乙個類引數,但是可以有多個類引數,每乙個類引數前都必須有關鍵字class或者型別名。

template< class t, class s, class r>

class test

;

類模板的例項化

array < int >表明用int型別來代替模板類中的類引數「t」,編譯器會將模板類array中所有的類引數t都用int來代替。例如類中的私有成員變數「t * num;」會被替換為「int * num;」。對類中的成員函式也會進行相同的替換,如「t & operator( int );」將會被替換為「int & operator( int );」。

#include using namespace std;

template< class t >

class array

~array();

private:

array(){};

int length;

t * num;

};template < class t >

array< t >::array( int n )

template < class t >

array< t >::~array()

template< class t >

t & array< t > ::operator ( int i )

template< class t >

const t & array< t > ::operator (int i) const

template< class t >

ostream & operator<<( ostream & out, const array & a )

int main()

cout<「array< int > a(10);」例項化之後建立了乙個物件a,該物件是乙個包含10個元素的整型陣列。之後用乙個for迴圈給陣列賦初值,由於我們過載了下標操作符,因此可以憑藉下標直接訪問相應的陣列元素。之後直接輸出a陣列的所有元素,此時呼叫的是輸出操作符過載函式。

另外模板類可以以引數的形式出現在函式的引數列表中,例如例1中的輸出操作符過載函式「template< class t > ostream & operator<<(ostream & out, const array & a)」,該函式的第二引數是array 的引用,如果引數列表中有模板類,則函式前面必須加上模板頭,在例1中的模板頭為「template< class t >」。

C 學習筆記 標準模板庫STL string

string s hello cout 成員函式at 會做範圍檢查,如果超出範圍,會丟擲out of range異常,而下標運算子不會做範圍檢查。vector的遍歷方式後面再提。string s1 good s2 morning good morning morning d 如果3 s1.size ...

C 學習筆記 STL(標準模板庫)

1 首先 需要學習c 模板的概念 2 c stl 標準模板庫 是一套功能強大的 c 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量 鍊錶 佇列 棧。3 c 標準模板庫的核心包括以下三個元件 元件描述 容器 containers 容器是用來管理某一類...

C 標準模板庫(一)

之前學習自定義模板時覺得自定義模板比較抽象,使用起來較為繁瑣。作為c 標準庫相當重要的一部分,stl庫提供一系列元件操作。為我們解決了這個問題。標準模板庫stl包括容器 迭代器 演算法 容器指包含資料的資料結構,容器中包含的物件是元素 迭代器指用來訪問容器中的元素物件,相當於元素物件的指標 演算法指...