課件內(nèi)容:
part1 C++模板介紹
part2 泛型編程
part3 容器
part4 一些進階問題
C++主要有兩種類型的模板
1.類模板(Class template):使用泛型參數(shù)的類
2.函數(shù)模板(Function template):使用泛型參數(shù)的函數(shù)
模板實例化:顯示和隱式兩種方式
類模板實參可以是某一型別或常量(僅限int或enum)
C++類模板的聲明注意事項:
1.聲明類模板和聲明函數(shù)模板類似
2.關(guān)鍵字class和typename都可以用酱塔,但還是傾向于使用typename
templateclass Stack{......};
template class Stack{......};
3.在類模板內(nèi)部翎苫,T可以像其他型別一樣(比如int,char等)定義成員變量和成員函數(shù)
void Push(const T const& element);
int Pop(T& element);
int Top(T& element) const;
std::vector m_Members;
泛型編程(Generic programming)
1.概觀(OverView):泛型編程作為一種編程思維和想法,它是一種編程方法,不依賴于具體的語言。
2.關(guān)聯(lián)特性(Traits)
3.迭代器(Iterators):迭代器是指針的泛化(generalization of pointers)
3.1迭代器本身是一個對象偏螺,指向另外一個(可以被迭代的)對象。
3.2用來迭代一組對象,即如果迭代器指向一組對象中的某個元素状知,則通過increment以后它就可以指向下一組對象中的一個元素。
迭代器(1)
迭代器是指針的泛化(generalization of pointers)
迭代器本身是一個對象孽查,指向另外一個(可以被迭代的)對象
用來迭代一組對象饥悴,即如果迭代器指向一組對象中的某個元素,則通過increment以后它就可以指向這組對象的下一個元素
在STL中迭代器是容器與算法之間的接口
算法通常以迭代器作為輸入?yún)?shù)
容器只要提供一種方式盲再,可以讓迭代器訪問容器中的元素即可西设。
迭代器(2)
迭代器的基本思想
1)在STL中,迭代器最重要的思想就是分離算法和容器答朋,使之不需要相互依賴
2)迭代器將算法和容器粘合(stick)在一起從而使得一種算法的實現(xiàn)可以運用到多種不同的容器上贷揽,如下面的例子所示,find算法接收一對迭代器梦碗,分別指向容器的開始和終止位置:
templalte
inline _InIt find(_InIt _First,_InIt _Last,const _Ty& _Val){
//find frist matching _Val
for(;_First != _Last;++_First)
if(*_First == _Val)
break;
return (_First);
}
Vector
1.Vector是一個能夠存放任意型別的動態(tài)數(shù)組
2.Vector的數(shù)據(jù)結(jié)構(gòu)和操作于數(shù)組類似禽绪,在內(nèi)存中的表示是一段地址連續(xù)的空間。
3.Vector與數(shù)組的區(qū)別在于洪规,數(shù)組大小往往是定義的時候已經(jīng)指定印屁,而Vector支持動態(tài)空間大小調(diào)整,隨著元素的增加淹冰,Vector內(nèi)部會自動擴充內(nèi)存空間库车。
4.為了使用Vector,必須用include指令包含如下文件,并通過std命名空間去訪問:
#include
int main(){
std::vector v;
}
創(chuàng)建Vector
向Vector中添加元素
判斷Vector是否為空
訪問Vector里面的元素:
vector::at() ?//會進行邊界檢查樱拴,判斷是否越界
vector::operator[] ? //不進行邊界檢查柠衍,性能較好
刪除元素:
Deque是一個能夠存放任意型別的雙向隊列
Deque提供的函數(shù)于Vector類似,新增了兩個函數(shù):
push_front:在頭部插入一個元素
pop_front:在頭部彈出一個元素
Deque采用了于Vector不同內(nèi)存管理方法:大塊分配內(nèi)存
為了使用deque晶乔,必須用include指令包含如下文件珍坊,并通過std命名空間去訪問:
include
int main(){
std::deque dq;
}
List的優(yōu)勢和劣勢
常用的操作方法: