STL vector原始碼及函式

2021-09-12 17:13:42 字數 1245 閱讀 8811

vector是一種動態增長的陣列。

vector 遍歷

乙個vector中所含的資料為三根指標 start, finish, end_of_storage

所以sizeof()乙個vector值為12。(乙個指標佔4位)

滿足前閉後開區間原則,start指向第乙個元素,finish指向最後乙個元素的下一位。

空間二倍增長:發生在新增元素時當finish==end_of_storage,利用輔助插入函式insert_aux()函式實現

insert_aux()步驟:

1.檢查finish是否等於end_of_storage

2.如果size不為0,申請乙個2*size的空間。

3.將原vector中在插入元素之前的元素拷貝到新vector中。

4.將新的元素插入在新的vector內。

5.將原vector中在新插入元素之後的元素拷貝帶vector中。

注意:在push_back()中第1步和第5部是多餘的。push_back()在呼叫insert_aux()之前已經檢查過步驟1,push_back()在最後插元素不需要步驟5。insert_aux()之所以這樣設計是因為除了push_back()函式意外insert()函式也會呼叫insert_aux(),需要步驟1和5。

gnu2.9 中直接將迭代器定義為元素型別的指標。

演算法如果需要獲取迭代器的特徵(trait)使用萃取機( iterator_traits)

vector::iterator it=v.begin();

iterator_traits::iterator_category

iterator_traits::difference_type

iterator_traits::value_type

gnu4.9中迭代器被設計為一種複雜的class。

STL vector原始碼解析

vector維護的是乙個連續空間,所以不論其元素型別如何,普通指標都可作為vector的迭代器而滿足所有條件。vector的迭代器 t 資料型別,alloc 空間配置器 template classt,class alloc alloc class vector vector的資料結構 templa...

STL vector 輔助函式

template inline bool operator const vector tp,alloc x,const vector tp,alloc y 判斷相等 template inline bool operator const vector tp,alloc x,const vector ...

waitpid函式原始碼

int sys waitpid pid t pid,unsigned long stat addr int options 掛起當前程序,直到pid指定的子程序退出終止或者收到要求終止該程序 的訊號 或者需要呼叫 乙個訊號處理函式 elseif pid elseif pid 1 以下的語名定為要找到...