實現STL中的向量 vector

2021-06-26 02:58:37 字數 1783 閱讀 5752

用到陣列就會想到對應的可以動態增加空間的向量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...