STL序列式容器之vector

2021-09-25 06:59:56 字數 2092 閱讀 5492

序列式容器

序列式容器:可序列集群,其中的元素都可序,但未必有序。

vector概述

vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈話性,array 是靜態空間,一旦配置了就不能改變;要換個大(或小)一點的房子,可以,一切瑣細得由客戶端自己來:首先配置一塊新空間, 然後將元素從舊址搬往新址, 再把原來的空間釋還給系統。 vector 是動態空間,隨著元素的加人,它的內部機制會自行擴充空間以容納新元素。因此,vector 的運用對於記憶體的合理利用與運用的靈活性有很大的幫助,我們再也不必因為害怕空間不足而一開始就要求 乙個大塊頭array 了,我們可以安心使用vector,吃多少用多少。

vector的實現技術,關鍵在於其對大小的控制以及重新配置時的資料移動效率.一旦vector舊有空間滿載,如果客戶端每新增乙個元素,vector內部只是擴充乙個元素的空間,實為不智,因為所謂擴充空間(不論多大) .一如精早所說,是「配置新空間/資料移動,釋還舊空間」的大工程,時間成本很高,應該加入某種未雨綢繆的考慮。

vector定義原始碼摘錄

// alloc是sgi stl的空間配置器

template class vector

void fill_ initialize(size_ type n, const t& value)

public:

iterator begin()

iterator end()

size_ type size() const

size_ type capacity() const

bool empty() const

reference operator(size_type n)

vector() : start(0), finish(0), end_ of_ storage(0) {}

vector(size_ type n, const t& value)

vector(int n, const t& value)

vector(long n, const t& value)

explicit vector(size_ .type n)

~vector()

reference front()//第乙個 元素

reference back()//最後乙個元素

void push_back(const t& x)

else

insert_aux(end(),x);

}void pop_back()

iterator erase(iterator position)

--finish;//後續元素往前移動

destory(finish);

return position;

}void resize(size_type new_ size, const t& x)

void resize(size_ _type new_ size)

void clear()

protected:

//配置空間並填滿內容

iterator allocate_ and_ fill(size_ type n, const t& x)

vector的迭代器vector 維護的是乙個連續線性空間,所以不論其元素型別為何種,普通指標都可以作為vector的迭代器而滿足所有必要條件。

vector::iterator ac;

vector::iterator ab;

//ac 的型別就是int*;ab的型別就是shape*。

vector的資料結構vector 所採用的的資料結構非常簡單:線性連續空間,它的兩個迭代器start和finish分別指向配置得來的連續空間中目前已使用的範圍,並以迭代器end_of_storage指向整塊連續的空間的尾端,如下圖所示:

STL 序列式容器 vector詳解

vector 的資料安排以及操作方式,與 array 非常相似。兩者唯一的差別在於對空間運用的靈活性。array 是靜態空間,一旦配置了就不能改變。vector 是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。一下內容主要針對 vector 基本的資料結構以及常用的方法進行介紹。...

STL序列容器 vector

二 vector vector容器是包含 t 型別元素的序列容器,和 array容器相似,不同的是 vector容器的大小可以自動增長,從而可以包含任意數量的元素 因此型別引數 t 不再需要模板引數 n。只要元素個數超出 vector 當前容量,就會自動分配更多的空間。只能在容器尾部高效地刪除或新增...

stl原始碼剖析序列式容器之vector

首先介紹下容器的概念,容器是將一些運用最廣的資料結構實現出來,並且根據資料在容器中的排列特性,這些資料結構分為序列式容器以及關聯式容器兩種。其中序列式容器包括array c 自建 vector heap priority queue 由heap演變 list slist deque stack和qu...