線性容器vector的使用

2021-09-25 00:17:05 字數 2318 閱讀 3573

模板類vector是陣列的替代品,它是一種動態陣列,在內部自動使用new和delete來管理記憶體(所以也是自由儲存區)。

1. vector的遍歷

vectorvec的遍歷方式有:

for(int i=0; ifor(iter=vec.begin(); iter!=vec.end();iter++)for_each( , , );

2. vector的查詢

vectorvec(5)的查詢方式為find:

#include..

.vector<

int>

::iterator iter =

find

(vec.

begin()

, vec.

end(),

3);

找到返回第一次出現位置迭代器,找不到返回vec.end()

find函式不屬於vector的成員,而存在於演算法中,所以應加上標頭檔案。

3. vector的刪除

vector的刪除有erase和pop_back函式。erase可以刪除指定元素或指定位置的元素,而pop_back只能去掉陣列的最後乙個資料。

for

(vector<

int>

::iterator iter=vec.

begin()

; iter!=

end();

)

上述刪除vec中值為3的元素。

條件語句裡面刪除元素時,iter = vec.erase(iter);返回值指向已刪除元素的下一位置,不是刪除元素時則直接進行++操作。

而語句vec.erase(vec.begin()+i, vec.begin()+j)則刪除區間[i,j)間的元素。

4. vector的增加

vector的增加有insert和push_back兩種方式。insert是插入元素到某個位置中,push_back是在最後新增乙個元素。

iterator insert

(iterator loc,

const type &val)

;//在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器

void

insert

(iterator loc, size_type num,

const type & val)

;//在指定位置loc前插入num個值為val的元素

void

insert

(iterator loc, input_iterator start, input_iterator end)

;//在指定位置loc前插入區間[start,end)的元素

5. vector的記憶體管理與效率

vector容器支援隨機訪問,為了提高效率採用的是動態陣列的方式實現。當進行insert或push_back增加元素的操作時,如果此時動態陣列的記憶體不夠用,就要動態的重新分配當前大小的1.5~2倍的新記憶體區,再把原陣列的內容複製進去。所以在一般情況下,其訪問速度同一般陣列相比,只有在需要重新分配記憶體時,其效能才會下降。

總結:對於vector容器,如果有大量資料需要進行push_back,應當使用reserve()函式提前設定其容量大小,否則會出現許多次容量擴充操作,導致效率低下。

6. resize()與reserve()

當知道有多少元素將最後出現在容器中時,可以提前reserve適當數量的空間;

保留可能需要的最大空間,然後新增完全部資料後,再修飾掉任何多餘的容量。

7. 通過swap修整vector過剩空間或釋放vector全部記憶體

修整過剩記憶體:

採用「收縮到合適」的方法,只需要一條語句:vector(vec).swap(vec);

表示式vector(vec)表示通過拷貝建構函式建立乙個臨時vector,它只分配拷貝的元素需要的記憶體,所以這個臨時vector沒有多餘的容量。然後,臨時vector和vec交換資料,使得vec中只有臨時變數修正過的容量,臨時vector則在語句結束時被銷毀。

釋放所有記憶體:

vector().swap(vec);

或者:vec.swap(vector());

思想與1相同,只是使用預設建構函式建立乙個空的臨時vector與原來的vec交換。

容器vector的使用

底層結構 動態型別的資料表,可以存放任意型別的的元素 如vector int vector成員變數 iterator start iterator finish iterator end of storage 常用介面 1.建構函式宣告 void printvector const vector v...

容器 Vector 的基本使用

v.push back value 代表向容器插入這種型別的資料 v.begin 指向容器的第乙個資料 v.end 指向容器的最後乙個資料的後乙個資料 include include include include using namespace std void myout int value i...

vector容器的使用方法

這個網上隨便都有啦,google一下,應有盡有。說明 vector 是一種動態陣列 是基本 陣列的類模板。其內部定義了很多基本操作。include 注意 標頭檔案沒有 h 構造 這個建構函式還有乙個可選的引數,這是乙個型別為 t的例項,描述了各個向量種各成員的初始值 如 vectorv2 init ...