底層實現:
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 容器所占用內存空間的末尾字節。
vector擴大容量的本質
另外需要指明的是,當 vector 的大小和容量相等(size==capacity)也就是滿載時,如果再向其添加元素,那么 vector 就需要擴容。vector 容器擴容的過程需要經歷以下 3 步:
1.完全棄用現有的內存空間,重新申請更大的內存空間;
2.將舊內存空間中的數據,按原有順序移動到新的內存空間中;
3.最后將舊的內存空間釋放
相關問題:迭代器什么時候失效
https://www.cnblogs.com/holmes7521/p/15126838.html
