天天看點

自考 C++ 雜記 —— 類模闆與向量

目錄

一、 類模闆

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

【解析】一個類模闆(類生成類)允許使用者為類定義個一種模式,使得類中的某些資料成員、預設成員函數的參數,某些成員函數的傳回值,能夠取任意類型(包括系統預定義的和使用者自定義的)。如果一個類中的資料成員的資料類型不能确定,或者是某個成員函數的參數或傳回值的類型不能确定,就必須将此類聲明為模闆,它的存在不是代表一個具體的、實際的類,而是代表一類類。模闆類是類模闆執行個體化後的一個産物。

【知識點】模闆