vector與array非常相似,唯一的區別在於靈活性,陣列是靜態空間,一旦定義就不能改變,變大變小都需要客戶端自己重新配置新的空間,然後將元素從舊址搬到新址,再把原來的空間還給系統。
vector是動態空間,隨著元素的加入,他的內部機制會自行擴充空間以容納新元素。
1.vector的底層實現
vector所採用的是乙個連續的線性空間,以兩個迭代器start和finish分別指向連續空間中已被使用的空間的頭和尾,以迭代器end_of_storage指向整個連續空間的尾部(包括備用空間)。
為了降低空間配置時的速度成本,vector實際配置的大小通常比客戶端的需求更大一些,以便將來可能的擴充。template //vector預設使用alloca作為空間配置器
class vector
2.vector的初始化
3.vector的常用操作vectorv1 // 預設初始化, 此時v1為空。
vectorv1(v2) // 執行的copy初始化,此時v1與v2的內容相同
vectorv1 = v2 // 與上面相同,都會執行copy建構函式
vectorv1(n) // 此時v1的size大小為n ,它裡面的值是根據t的型別進行預設初始化的
vectorv1(n, a) // v1的初始化為n個值為a的元素
vectorv1 // 列表初始化,v1內現在的元素就是a, b, c
vectorv1 = // 列表初始化,v1內現在的元素就是a, b, c
倍數開闢更大的記憶體temple class vector
//返回乙個指向容器第乙個元素的迭代器
iterator end() //返回乙個指向容器最後乙個元素的下乙個位置的迭代器
size_type size() const
//返回容器中已經存放的元素個數
size_type capacity() const
//返回現有的儲存容量
bool empty() const //判斷容器是否為空
reference operator(size_type n)
reference front() //返回頭部元素的引用
reference back()
除了上面說到的begin和end之外,還有rbegin和rend
v.rbegin()返回的是乙個指向容器的最後乙個元素逆序迭代器
v.end()返回的是乙個指向容器中第乙個元素的上乙個位置的逆序迭代器
檢視容器大小的操作還有max_size()和resize()
v.max_size()返回容器中可容納最多的元素個數
v.resize(n) 調整容器v的長度大小,使其能容納n個元素,若n4.vector的插入和刪除
v.push_back(t)//在容器尾部插入乙個元素t,時間複雜度為o(1)
void push_back(const t& x)
else //沒有備用空間則擴容 }
v.insert(p,x)//在迭代器p所指向的元素前插入新元素x,返回指向新元素的迭代器
iterator insert(iterator position,const t& x)
else }
v.insert(p,n,x)//在迭代器p所指向的元素前插入n個初始化為x的元素
void insert(iterator pos,int n,const t& x)
v.insert(p,f,l)//在迭代器p所指向的元素前插入f和l之間的元素
temple void insert(iterator position, inputiterator first, inputiterator last)
v.erase(p)//刪除迭代器p指向的元素,返回乙個指向被刪除元素後面的元素,
如果配置項容器的最後乙個元素,則返回的迭代器指向超出末端的下乙個位置,
如果p本身就是超出容器末端的下乙個位置,則該函式未定義
iterator erase(iterator position)
v.erase(f,l)//刪除f到l之間的所有元素,返回乙個迭代器,它指向被刪除元素段後面的元素。
如果l本身就是指向超出容器末端的下乙個位置,
則返回的迭代器也指向容器末端的下乙個位置
iterator erase(iterator f,iterator l)
v.clear()//刪除容器中能夠所有元素
v.pop_back()//刪除容器中的最後乙個元素
void pop_back()
舊的資料拷貝到新的記憶體
釋放舊記憶體,指向新記憶體
順序容器 vector
一 底層實現 vector就是動態陣列.它也是在堆中分配記憶體,元素連續存放,有保留記憶體,如果減少大小後,記憶體也不會釋放.如果新值 當前大小時才會再分配記憶體.它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和...
順序容器vector
vector的關鍵在於其對大小的控制以及重新配置時的資料搬移效率。由於vector維護的是乙個連續線性空間,所以不論元素類別,普通指標都可以作為vector的迭代器而滿足必要條件,包括隨機訪問 操作符 等操作行為。vector提供的是random access iterators。typedef v...
STL順序容器 vector
vector是乙個線性順序結構。相當於陣列,但其大小可以不預先指定,並且自動擴 展。它可以像陣列一樣被操作,由於它的特性我們完全可以將vector 看作動態數 組。在建立乙個vector 後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料 儲存,初始的空間大小可以預先指定也可以由vector 預...