向量vector 中主要函式的使用

2021-09-06 06:35:34 字數 1998 閱讀 3124

一、vector用於實現陣列的功能,相當於在陣列的基礎上封裝了一些常用的功能。

vector的主要函式

函式名稱

功能push_back

在尾部新增乙個元素

pop_back

在尾部刪除乙個元素

clear

清空所有元素

at按索引訪問某個位置的元素

front

返回頭元素

back

返回尾元素

size

返回元素的個數

capacity

返回當前容量

resize

改變容量的大小

insert

在中間插入元素

erase

刪除中間元素

vector和普通的陣列一樣。具有容量的概念,可以推斷,vector內部是有乙個緩衝區來儲存元素的,類似於下面的**

templateclass vector

;

可見,vector內容上還是陣列,只是外在形式上比較單純的陣列更易於使用了,它對外封裝了前面所列的介面函式,使讀者非常方便的操縱陣列

在建立vector物件時,可以顯示的指定其初始大小,例如,以下的**將初始容量設定位128,這意味著其內部建立了乙個可以容納128個元素的緩衝區

vectorarr(128);

int capacity = arr.capacity(); //容量:128

int size = arr.size(); // 大小:128,已經包含了128個元素,並且此時的128個元素都為0

//在這種情況下,size和capacity相等

二、用at函式訪問陣列中的元素

vectorarr(128);

for(int i=0; i看起來很簡單,直接用at函式可以得到元素的引用(左值),然後直接操作這個引用即可。實際上vector還過載了操作符[],因此以下的**是等價的

int &p = arr.at(0);

int &p = arr[0];

使用操作符 [ ],會顯得更簡潔一些,但是值得強調的是,如同陣列一樣,要注意越界問題,無論是at還是[ ] ,傳入的索引值都要在正確的範圍之內(0 <= index <= capacity - 1)。

注意上述的arr不是陣列,而是類

三、vector的乙個顯著的特點是,其容量可以動態調整的,使用push_back可以在尾部追加乙個元素,使用pop_back刪除 尾部元素

例如:

vectorarr; //capacity:0, size:0

arr.push_back(1); //capacity:4,size:1

當建立物件時如果沒有指定capacity,則預設為0,此時capacity和size都是0(此時的緩衝區也是沒有建立的),當使用push_back在末尾新增乙個元素時:

(1)如果還有空間可用(size < capacity),則size加1,capacity不變

(2)如果空間已滿(size = capacity),則重新申請乙個較大的緩衝區,再把原有的拷貝到新緩衝區,再把新元素追加在後面。此時size加1,capacity為新的緩衝區的容量(一般新容量是原有的capacity+4,也有可能是每增加乙個元素,capacity也增加1,具體取決於stl的庫實現)。

由此可見,push_back並不是節省cpu的操作,它是反覆地申請新緩衝區和拷貝大段資料,所以,在使用vector時候,應該預先估計一下,程式執行時可能需要的最大容量,並在初始化的時候指定其capacity引數,如果在迫不得已的情況下一定要調整容量的話,可以使用resize函式,盡量一步調整到位,不要多次反覆的使用resize

四、clear函式用於清空元素,size歸0,而capacity不變,內部緩衝區不重新申請

c 中 的向量vector

cpp view plain copy print?include include include include 使用向量 就包含向量的標頭檔案 include include using namespace std intmain typedef vector double size type ...

STL中的向量 vector

向量 vector 是乙個封裝了動態大小陣列的順序容器 sequence container 跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是乙個能夠存放任意型別的動態陣列。當程式設計師無法知道自己需要的陣列的規模多大時,用 vector 來解決問題可以達到最大節約空間的目的...

c 中vector向量的一些主要問題

近日,用到c stl中vector,瀏覽到關於出現 debug error vector iterator not dereferencable 問題的一帖子 include include using namespace std void excisevector void int main vo...