用到陣列就會想到對應的可以動態增加空間的向量vector
下面是模擬stl的基本功能,參《c++ primer》第四版
將實現檔案也寫到類中的,可以無視**風格
這裡用到了記憶體管理的類 allocator
allocatora 定義allocator的物件,可以構造分配t型別的物件
a.allocate(n) 分配原始的t型別的n個物件,不會呼叫t的建構函式
a.deallocate(p,n) 釋放記憶體,首位址為p,的n個t型別的物件
a.construct(p,t) p為t*型別,p所指的位址處構造新元素,呼叫t的複製建構函式用t初始化該物件
a.destroy(p) 與上面相對應,p所指的物件處呼叫析構函式
uninitialized_copy(b,e,b2) 從b到e的元素,複製給b2所指的記憶體
uninitialized_fill(b,e,t) 從b到e範圍中的物件,初始化為t
uninitialized_fill(b,e,t,n) 從b到e範圍中的物件,n個初始化為t
這裡的記憶體分配是按照先前分配的2倍
stl中的是按照加上原來的一半的分配策虐
template class vector
// operation
public:
void pop_back() // pop_back()
void push_back(const t& t) // push_back()
t* erase(t *p) // erase()
t& front() // front()
t& back() // back()
void resize(size_t n) // they should be initialized (standard library)
else if (n > size)
else
for (t *p = first_free; p != element + n;)
alloc.destroy(--p);
fist_free = element + n;
} void resize(size_t n, t& t)
else if (n > size)
else
for (t *p = first_free; p != element + n;)
alloc.destroy(--p);
fist_free = element + n;
} void reserve(const size_t capa) // 設定儲備空間 capability
t& operator(size_t index)
const t& operator(size_t index) const
size_t capability()
size_t size()
t* _begin()
t* _end()
private:
static std::allocatoralloc;
void reallocate()
t* element;
t* first_free;
t* end;
};templatestd::allocatorvector::alloc;
STL中的向量 vector
向量 vector 是乙個封裝了動態大小陣列的順序容器 sequence container 跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。當程式設計師無法知道自己需要的陣列的規模多大時,用 vector 來解決問題可以達到最大節約空間的目的...
STL 向量vector詳解
vector是stl中最常見的容器,它是一種順序容器,支援隨機訪問。vector是一塊連續分配的記憶體,從資料安排的角度來講,和陣列極其相似,不同的地方就是 陣列是靜態分配空間,一旦分配了空間的大小,就不可再改變了 而vector是動態分配空間,隨著元素的不斷插入,它會按照自身的一套機制不斷擴充自身...
STL中的序列式容器 vector(向量)
vector 是向量型別,它可以容納許多態別的資料,如若干個整數,所以稱其為容器。vector 是c stl的乙個重要成員,使用它時需要包含標頭檔案 include vector 容器的長度不固定,能夠在程式執行時動態地改變,故也稱動態陣列。有以下方式,舉例說明如下 vector int a vec...