Vector動態擴容


Vector動態擴容

無聊看了一下Vector的源碼

看看動態擴容怎么實現的

一.vector的介紹

首先這玩意是動態的,非常靈活 儲存的時候是連續的線性空間,

插播一個在<STL源碼剖析> 中看到的問題, 提出質疑

原文如下:

  
所以它的迭代器也是完全可以用普通的指針

比如
vector<int>::iterator i1;
vector<shape>::iteraor i2;

i1其實就是int *
i2其實就是 shape *
    //

但是經過我的實驗, 好像不是這樣

先上Vector的數據結構

class Vector
{
	public:
		iterator start;
		iterator begin(){return start};
        //目前使用了的空間頭
        
		iterator finish;
		iterator end(){return finish};		
        //目前使用了的空間的尾
        
        size_type size(){ return size_type(end-start);}
        
        reference front() {return *begin();}
        reference back(){return *(end()-1);}
		iterator end_of_storage;	//目前可用空間的尾
		
    	bool empty(){return begin()==end();}
}

看完覺得真的很簡潔 我這里粗略的寫了一些而已 夠我們后面去理解

當我們用push_back插入的時候,會檢查 還有沒有備用的空間 ,如果沒有的話

要經歷allocator先按規則分配空間 然后把之前的拷貝過去, 再插入,最后釋放原來的空間 這是一個龐大的工程

分配空間的規則

{

如果原本大小為0

​ 分配空間為1;

else

​ 分配空間為=原來的*2;

}


免責聲明!

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



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