STL之vector用法總結

2021-06-05 06:45:34 字數 3266 閱讀 4079

vector是一種順序容器,有大小限制,但是可以動態的擴充套件,不能減小對應的空間,同陣列一樣,是線性排列的,在其尾不插入刪除效率很高,中間的插入刪除效率一般,可以向陣列一樣隨機訪問表中的元素。

stl中的資料結構,都可以使用自定義的資料型別,便於擴充套件。

標頭檔案:#include

using namespace std ;

1.建立物件與初始化:

(a) vectorv ;//建立乙個

t型別的

vector

,此時vector

為空,容量為

0.(b) vectorv (n);//建立乙個

t型別的

vector

,容量為

n(c) vectorv(v1) ;//建立乙個

t型別的

vector

,為v1

的乙個拷貝,要求資料型別相同。

(d) vectorv(n1 , n2) ;//建立乙個

t型別的

vector

,含n1

個元素,每個元素的值都為

n2 ;

(e) vectorv(v1.begin() , v2.end()) ;//建立乙個

t型別的

vector物件v

,元素為區間

[v1.begin() , v1.end())

的元素。

2.assign()//分配值

與list

相同有兩中使用方式

:v.assign(v1.begin() , v1.end()) ;//如果

v1中的元素為7個

4,此時v中有

7個4,後面的元素預設初始化為

0v.assign(7 , 4) ;//v中的元素為7個

4,如果原來

v的大小沒有

7,那麼會申請空間到7個。

3.back();//返回最後一元素,與

list

相同4.begin();//返回第乙個元素的迭代器,這些與

list

都相同5.capacity();

//返回

vector

所能容納的元素數量

(在不重新分配記憶體的情況下)

6.clear();//清空所有元素。

7.empty();//判斷

vector

是否為空(返回

true

時為空)

8.end();//返回最末元素的迭代器(譯註

:實指向最末元素的下乙個位置

)9.erase();//刪除節點內容用到了

erase()

函式,有兩個過載

:iterator erase( iterator loc );

iterator erase( iterator start, iterator end );

這兩個迭代操作尤其需要注意,涉及到迭代器的操作都需要考慮迭代器的時效性,操作完後,迭代器就失效了,需要重新複製,才能合法訪問。

10.front() ;//返回第乙個元素

11.get_allocator();//返回

vector

的記憶體分配器,感覺不怎麼常用

12.insert() ;//插入元素到

vector

中,運用類似與

list

的insert

,含有三種形式,在指定位置,插入乙個或者多個元素;如:

v1.insert(v1.begin() + 10 , 5);//在第

11個位置插入乙個元素值為5。

v1.insert(v1.begin() , v.begin() , v.end());//在

v1的開始將

v的元素依次插入到

v1中。

v2.insert(v2.begin() , 5 , 100) ;//在

v2的開頭插入5個

10013.max_size();//返回

vector

所能容納元素的最大數量(上限)

14.pop_back();//移除最後乙個元素

15.push_back();//在

vector

最後新增乙個元素

16.rbegin();//返回

vector

尾部的逆迭代器

17.rend();//返回

vector

起始的逆迭代器

18.reserve();//設定

vector

最小的元素容納數量

19.resize();//改變

vector

元素數量的大小,重新設定大小

20.size();//返回

vector

元素數量的大小

21.swap() ;//交換兩個

vector

,此處傳遞的是位址,不是值傳遞,按引用方式傳遞,會發生實際交換。

22.關於vector

的訪問方式

前面說過vector

的訪問方式就像陣列一樣,

vector

有三種訪問方式:

1. v.at(n) ;//訪問地

n個元素,此時要確保不能越界。

2. v[n] ;像陣列一樣直接訪問第

n個元素,同樣保證不能越界

3. 使用迭代器順序訪問:

vector::iterator it ;

for(it=v2.begin() ; it!=v2.end() ; it ++)

在使用迭代器的時候注意迭代器的使用範圍,特別是對於增刪操作的時候,尤其當心迭代器的範圍,很容易導致迭代器失效。並且迭代器的效率一般不是很高,如果可以使用下表形式,最好使用下標形式來遍歷以及操作物件中的元素。

vector的乙個簡單使用例子:

#include#include#include#includeusing namespace std ;

int main()

{ vectorv(10) ;

coutint i ;

i =0 ;

/* while(i < 10)

{ coutcout<::iterator it ;

for(it=v2.begin() ; it!=v2.end() ; it ++)

{ cout<<(*it) + 5<

關於vector

與stl

中的演算法的組合使用,會在後面的

stl演算法中繼續介紹。

STL總結之 vector容器

看黑板 vector,向量,封裝了陣列。內部實為乙個指標指向一塊連續的空間,當空間被放滿時,會自動申請一塊更大的空間,將原有的所有資料拷貝過來,並將上一塊空間釋放掉。由於是一塊連續的空間,故可以用下標訪問的方式進行隨機訪問。若專案中需要進行高頻率的訪問,則可以優先考慮vector。常用函式 1 尾部...

STL容器 Vector用法

標頭檔案 include 建立 vectorv 尾部插入元素 v.push back a 在第i 1個元素前面插入a v.insert v,begin i 刪除第i 1個元素 v.erase v,begin i 刪除區間 i,j 的元素 v.erase v.begin i,v.end j 下標訪問第...

C STL之vector用法總結

vector是表示可變大小陣列的序列容器。就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。本質講,vector使用動態分配陣列來儲存它的元素。當新元...