C++ vector(STL vector)底層實現機制(通俗易懂)

2020-07-16 10:05:25
STL 眾多容器中,vector 是最常用的容器之一,其底層所採用的資料結構非常簡單,就只是一段連續的線性記憶體空間。

通過分析 vector 容器的原始碼不難發現,它就是使用 3 個疊代器(可以理解成指標)來表示的:
//_Alloc 表示記憶體分配器,此引數幾乎不需要我們關心
template <class _Ty, class _Alloc = allocator<_Ty>>
class vector{
    ...
protected:
    pointer _Myfirst;
    pointer _Mylast;
    pointer _Myend;
};
其中,_Myfirst 指向的是 vector 容器物件的起始位元組位置;_Mylast 指向當前最後一個元素的末尾位元組;_myend 指向整個 vector 容器所佔用記憶體空間的末尾位元組。

圖 1 演示了以上這 3 個疊代器分別指向的位置。


圖 1 vector實現原理示意圖