閱讀STL原始碼剖析筆記 vector

2021-07-11 02:15:53 字數 1048 閱讀 8364

初步閱讀vector 的摘要原始碼,我找到了一些我覺得挺重要的東西,在stl原始碼剖析裡面,vector 的實現中有這麼幾個函式:

void push_back(const t& x)

else

}iterator erase(iterator position)

--finish;

destroy(finish); //這個全域性函式就是將指標所指的東西析構掉;

return position;

}

1.       從上面的push_back 函式並沒有看出vector對空間分配的特性:假如可用空間已滿,那麼就額外分配出基於當前元素個數的空間以便之後的插入/新增元素的操作

(/*額外分配元素個數依據不同的編譯器來確定*//*或者根據**?*/),我猜想應該是在insert_aux(iterator position)[上面沒寫出來] 這個函式裡面會解決空間的分配,然而摘要原始碼

裡面並沒有給出這個函式的實現,只能放一放。

2.        第二個函式:erase,這個函式是我們經常用到的函式之一,是刪除迭代器指定位置的元素,有2種過載版本可供我們使用,我就先理解一下只接受乙個迭代器的版本吧:

過程   : 判斷是否是最後乙個元素->所有元素前移一位->末端迭代器自減-> 返回傳入函式的迭代器。

我記得,在 《c++ primer》一書中,作者就警告我們說,erase操作會使迭代器失效,這個函式會返回指向後面乙個元素的迭代器,但是在這個函式裡面並沒有對原本迭代器作任何的改變(因為傳進來的不是引用),感覺這個迭代器的副本只是為了記錄所指向的位置,而經過copy之後,這個位置正好是原來容器中後面乙個元素所占用的位置,然後再把這個指標當作返回值返回,那麼可否看作是返回指向後面乙個元素的迭代器的假象呢?(求高人指點)

反正感覺弄不懂的話,那麼用erase函式的時候記得《c++ primer》中說的就好 ——返回指向下乙個元素的迭代器

3.對vector 的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了

如果有不對的地方,歡迎指正!

STL原始碼剖析筆記

在stl中,迭代器使得容器與演算法分離開來,迭代器會定義五種型別。hash table是一種資料結構,和rb tree類似。其中set map multi set multi map都是基於rb tree。在stl中,patial sort 和nth element 不一樣。patial sort是...

《STL原始碼剖析學習筆記》

1 演算法泛化過程 首先是模板 適應不同型別 其次是迭代器 具有原生指標行為的類 最後是仿函式 行為類似函式指標,但更適合泛化 泛化的優點 個人總結 1 簡化程式,提高 的可重用性 2 提高了程式的通用性 3 提高了程式的可讀性 4 提高了安全性 函式指標及仿函式 首先說說函式指標,乙個程式可能需要...

《STL原始碼剖析》學習筆記

第二章 空間配置器 allocator 考慮到小型區塊可能造成的記憶體破碎問題,sgi設計了雙層級配置器。當配置區塊超過128bytes時,便呼叫第一級配置器,即直接使用malloc free sgi的第一級配置器的allocate 和realloc 都是在呼叫malloc 和realloc 不成功...