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 程式設計師。然一些基礎思想,程式設計方法,...