vector底層實現和擴容機制


底層實現:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM