C 容器基礎之vector

2021-10-04 16:24:14 字數 2178 閱讀 5724

vector是線性容器,元素按照線性順序排序,容器中元素儲存在一塊連續的記憶體中,類似與陣列,不過vector可以自動增長或縮小儲存空間。

和其他標準的順序容器相比:vector可以更有效的訪問容器內元素,和在末尾新增、刪除元素;而在其他位置的新增刪除元素,vector不如其他順序容器。

注意:size()返回容器的大小,大小指的是當前容器中元素的個數,cacapacity()返回的是容器的容量,容量指的是已經分配的記憶體的大小。

1、初始化和遍歷

//三種遍歷方式

//1、下標

for(int i=0; i::iterator it = vec.begin(); it != vec.end(); it++)

cout << endl << "---------" << endl;

//3、for each

for(int temp : vec)

其中,vec.begin()指的是vec中第乙個元素的迭代器,vec.end()指的是最後乙個元素的下乙個位置。 

2、vector的排序

兩種方式:1)如果存放的是自定義物件,則可以在類中實現《運算子,然後使用sort函式進行比較;2)自定義比較函式,在使用sort函式的時候,將比較函式當作引數傳入其中。其中,sort函式是演算法中的函式,標頭檔案是algorithm。

3、查詢

可以使用演算法中的find函式,標頭檔案是algorithm。如果存在則返回迭代器,否則返回vector.end()。

4、刪除

三種方式:1)pop_back(),刪除最後乙個元素;2)erase()刪除指定元素;3)clear(),刪除所有元素,清空。

erase()有兩種形式:

使用erase的時候要注意迭代器失效的問題。

for(auto it = vec.begin(); it != vec.end(); it++)

}

此**是錯誤的,當刪除it的時候,it就變成了野指標,無法進行++操作的。

for(auto it = vec.begin(); it != vec.end(); it++)

}

此**也是錯誤的:1)無法刪除連續的3;2)當3位於vector的末尾,刪除的時候也會出錯(在vec.end()上執行了++操作)。

for(auto it = vec.begin(); it != vec.end(); )else

}

這才是正確的刪除方式。

5、新增

有兩種方式:1)insert,是在指定位置新增元素;2)push_back,是在最後新增元素

insert有三種形式:

1、使用reserve ()函式提前設定容量大小

vector支援隨機訪問,為了提高效率,採用動態陣列實現。在通過reserve函式來申請特定大小的記憶體空間的時候,總是按照指數邊界來增大其內部緩衝區的。當進行insert或者push_back操作時,如果空間不夠用,則會重新分配當前大小的1.5~2倍的新記憶體區,然後再把原來的內容複製過去。所以,當重新分配的操作發生時,其效能才會下降。

所以,如果有大量的資料進行新增的時候,應當使用reserve()函式提前設定其容量大小,否則會出現多次容量擴大的操作,導致效率低下。

比如,如果要儲存1000個資料,可以這樣做:

vectorvec;

vec.reserve(1000);

for(int i = 0; i < 1000; i++)

vec.push_back(i)

2、使用「交換」來調整vector過剩空間

有一種方法來把它從曾經最大的容量減少到它現在需要的容量,這樣的方法常常被稱之為「收縮到合適」(shrink to fit)。

該方法只需要一條語句:vector(ivec).swap(ivec)。

vector(ivec)表示建立乙個臨時的vector,它是ivec的乙份拷貝。但是vector的拷貝建構函式只分配拷貝元素所需要的記憶體,也就是說這個臨時的vector沒有多餘的空間。然後臨時的vector和ivec進行交換資料,但是ivec只有臨時變數的修正過的容量,而這個臨時變數則持有了ivec曾經沒有用到的容量。在這條語句的結尾處,臨時vector被銷毀,釋放之前ivec使用的記憶體,而相應的ivec收縮到合適大小。

c 標準容器基礎《vector》

vector實際上是array的加強版,vector具有許多實用的內建函式,總體比array方便許多,與普通陣列相比最大的特點在於其動態地開闢儲存空間,而非像陣列一樣使用前先提前開闢固定大小的記憶體空間,對於需要從鍵盤輸入開闢大小的數值時極為方便。vector與array的簡單對比 include ...

c 之vector(建立容器)

表示物件的集合,所有物件的型別都相同 集合中每個物件都有乙個對應的索引,用於訪問物件 標頭檔案 include using std vector提供資訊的方式為 在模板名字後面跟著的一對尖括號裡放上資訊 vectorv1不同型別的元素只能放入與之型別相對應的容器中,不能亂搭 初始化vector物件的...

c 之vector容器入門

對於c 的vector容器的函式應用 include include include using namespace std intmain cout cout 迭代器形式結果 for it vt.begin it vt.end it cout cout vt元素個數是 size函式 插入元素函式 ...