STL原始碼分析之vector

2021-10-01 22:41:11 字數 1619 閱讀 9502

vector是序列容器的一種,分配的是一段連續的空間,所以它支援下標訪問,同時它另一特點是可以自行擴充空間,每次是以原大小兩倍來擴充,是另外配置的一塊空間,將原內容拷貝過去,所以當對vector的空間進行重新配置時,指向原vector的迭代器就失效了。下面分析它具體是怎麼實現的和熟悉下vector內部函式

迭代器裡面主要有三個迭代器

iterator start;               // 表示目前使用空間的頭

iterator finish; // 表示目前使用空間的尾

iterator end_of_storage; // 表示vector可用空間的尾部

建構函式

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) //加explicit防止發生隱式轉換

vector(const vector& x)

vector有多種建構函式,可以看到它主要可以有一下幾種形式構造

vectorss(10,0)

vectorss(10)

vectorss(s) //拷貝構造,s是已初始化的vector物件

可以看到空間申請主要是用的fill_initialize函式

void fill_initialize(size_type n, const t& value)
可以看到它主要是呼叫了allocate_and_fill申請空間

iterator allocate_and_fill(size_type n, const t& x) 

__stl_unwind(data_allocator::deallocate(result, n)); //失敗**空間

}

3.一些特殊操作函式

iterator begin()   //獲取相應迭代器

iterator end()

// 返回當前物件個數

size_type size() const

size_type max_size() const

size_type capacity() const

bool empty() const //是否為空

reference operator(size_type n)

reference front() //訪問元素

reference back()

void push_back(const t& x)

else

insert_aux(end(), x); //直接追加元素

}void pop_back()

iterator erase(iterator position)

STL原始碼分析之Vector

地球人都知道vector的查詢效率很高,插入和刪除的效率低下,容器會隨著元素的不斷增加自動增長,最近在看了stl原始碼之後,發現確實是這樣,下面是vector一些關鍵的函式.從這些函式可以看出插入和刪除的過程,以及容器自動增長的方式.兩個通過下標獲取元素的函式.reference operator ...

STL原始碼剖析之vector

向量vector 1.vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。vector的實現技術,關鍵在於其對大小...

stl原始碼剖析之vector

作者最近在學習c 學習侯捷的stl原始碼剖析這本書,但是我覺得裡面的內容有些古老並且生澀。比如說alloc,對於一些基礎知識不太牢固的同學不是很友好 我建議先細讀第二章前4小節,第一級分配器之後的內容可等基礎足夠再回頭彌補 雖然這本書本就不是面對像菜鳥的c 程式設計師。然一些基礎思想,程式設計方法,...