目錄
一、 類模闆
1.1 模闆類基礎文法
1.2 模闆類的派生與繼承(僅介紹模闆類繼承非模闆類和從模闆類派生一個類模闆的情況)
二、 向量與泛型算法
1.定義向量清單
2.泛型指針
3.向量最基本的操作方法
曆年真題:
一、 類模闆
1.1 模闆類基礎文法
聲明類模闆
template <typename T> 或者 template < class T> //帶參數T的模闆聲明,類型T不是類,而是對類的描述,常稱為類模闆
模闆類聲明的一般方法
template <類模闆參數>
class 類名
{
//類體
};
用類模闆定義對象
類名 <模闆執行個體化參數模型> 對象名 (構造函數實參清單);
類名 <模闆執行個體化參數模型> 對象名; //預設或者無參數構造函數
在類體外面定義成員函數時,必須用template重寫模闆類聲明。
template <類模闆參數>
傳回類型 類名 <模闆類型參數> :: 成員函數名(函數參數清單)
{
//函數體
}
<模闆類型參數> 是指 template 的"<>"内使用 class(或typename) 聲明的類型參數,構造函數和析構函數沒有傳回類型,另外C++函數的傳回值類型可以是除數組和函數以外的任何類型。
1.2 模闆類的派生與繼承(僅介紹模闆類繼承非模闆類和從模闆類派生一個類模闆的情況)
模闆類繼承非模闆類時,由它派生的類的資料成員可以是不同的類型,而模闆類派生一個類模闆時,兩者的資料成員類型一緻。
二、 向量與泛型算法
與操作對象的資料類型互相獨立的算法稱為泛型算法
1.定義向量清單
四種構造函數:
1) vectot<type> name; //定義type的向量清單
2) vectot<type> name(length) //定義具有length個type的向量,元素初始化為0
3) vectot<type> name(length, a ) //定義具有length個type的向量,元素初始化為a
4) vectot<type> name1(lname) //使用已定義的向量name構造向量name1
2.泛型指針
泛型算法:與操作對象的資料類型互相獨立。
泛型指針的一般形式:vector <type>::iterator 泛型指針名 //逆向為reverse_iterator
3.向量最基本的操作方法
1)通路向量容量資訊的方法
size(); //傳回目前向量中已經存放的對象的個數
max_size(); //傳回向量可以容納最多對象的個數(由硬體決定)
capacity(); //傳回無序再次配置設定記憶體就能容納的對象個數
empty(); //向量為空時傳回true
max_size() >= capacity() >=size()
2)通路向量中對象的方法
front(); //傳回向量中第1個對象
back(); //傳回向量中最後1個對象
operator[ ](size_type, n); //傳回向量中的第n+1個對象(下标為n的向量元素)
3)在向量中插入對象的方法
Push_back(Const T&); //向向量尾部插入一個對象
Insert(iterator it,const T&); //是向it所指向量位置前插入1個對象。
Insert(iterator it,size_type n,const T&X); //是向it所指向量位置前插入n個值為X的對象。
4)在向量中删除對象的方法
Pop_back(Const T&); //删除向量中最後一個對象
Erase(iterator it); //删除it所指向的容器對象
Clear(); //删除向量中的所有對象,empty()傳回true值
曆年真題:
1.模闆函數的真正代碼是在源程式中__調用函數_時産生。
2.insert(iterator it,const T&)是向it所指向量位置前__插入__個對象。
3.下列有關模闆的描述中,錯誤的是
- A.模闆把資料類型作為一個設計參數,稱為參數化程式設計
- B.使用時,模闆參數與函數參數相同,是按位置而不是名稱對應的
- C.模闆執行個體化參數類型包括資料類型和值
- D.類模闆與模闆類是同一個概念
【答案】D
【解析】一個類模闆(類生成類)允許使用者為類定義個一種模式,使得類中的某些資料成員、預設成員函數的參數,某些成員函數的傳回值,能夠取任意類型(包括系統預定義的和使用者自定義的)。如果一個類中的資料成員的資料類型不能确定,或者是某個成員函數的參數或傳回值的類型不能确定,就必須将此類聲明為模闆,它的存在不是代表一個具體的、實際的類,而是代表一類類。模闆類是類模闆執行個體化後的一個産物。
【知識點】模闆