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;
}
