C vector陣列的使用方法(簡化實用版)

2021-10-02 18:55:43 字數 3192 閱讀 3046

在c++中,vector是乙個非常有用的「容器」,它能夠存放各型別的資料,並且可以動態分配記憶體。下面介紹一下使用vector需注意的幾點:

1.vector陣列的初始化

(1): vector ilist1;

預設初始化,vector為空, size為0,表明容器中沒有元素,而且 capacity 也返回 0,意味著還沒有分配記憶體空間。這種初始化方式適用於元素個數未知,需要在程式中動態新增的情況。
(2): vector ilist = ;

這種初始化類似於普通陣列的初始化形式

ilist 初始化為列表中元素的拷貝,列表中元素必須與ilist的元素型別相容,本例中必須是與整數型別相容的型別,整形會直接拷貝,其他型別會進行型別轉換

(3): vector ilist(5);

預設值初始化,ilist中將包含5個元素,每個元素進行預設的值初始化,對於int,也就是被賦值為0,因此ilist被初始化為包含5個0。當程式執行初期元素大致數量可預知,而元素的值需要動態獲取的時候,可採用這種初始化方式。

(4):vector ilist(7,3);

指定值初始化,ilist被初始化為包含7個值為3的int

常見錯誤賦值方法

**vectora;

for(int i=0;i<10;++i)//下標只能用來獲取已經存在的元素**

2、vector作為函式的引數或者返回值時,需要注意它的寫法:

double distance(vector&a, vector&b) 其中的「&」一定不能少!!!

下面是以vector作為返回值時的寫法

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

vector<

int>

dp(treenode* root)

; vector<

int>left=

dp(root-

>left)

; vector<

int>right=

dp(root-

>right)

;int rob=root-

>val+left[0]

+right[0]

;int not_rob=

max(left[0]

,left[1]

)+max(right[0]

,right[1]

);return vector<

int>

;//注意此處not_rob與rob的位置

//因為我們定義的是arr[0]是不搶,arr[1]代表搶,所以第乙個元素必須是

//not_rob,否則會得到錯誤的答案。}}

;

vector的元素不僅僅可以是int,double,string,還可以是結構體,但是要注意:結構體要定義為全域性的,否則會出錯。

#include

#include

#include

#include

using

namespace std;

typedef

struct rect

}}rect;

intmain()

vector是線性容器,它的元素嚴格的按照線性序列排序,和動態陣列很相似,和陣列一樣,它的元素儲存在一塊連續的儲存空間中,這也意味著我們不僅可以使用迭代器(iterator)訪問元素,還可以使用指標的偏移方式訪問,和常規陣列不一樣的是,vector能夠自動儲存元素,可以自動增長或縮小儲存空間,

vector的優點:

可以使用下標訪問個別的元素

迭代器可以按照不同的方式遍歷容器

可以在容器的末尾增加或刪除元素

和陣列相比,雖然容器在自動處理容量的大小時會消耗更多的記憶體,但是容器能提供和陣列一樣的效能,而且能很好的調整儲存空間大小

和其他標準的順序容器相比(deques or lists),能更有效訪問容器內的元素和在末尾新增和刪除元素,在其他位置新增和刪除元素,vector則不及其他順序容器,在迭代器和引用也不比lists支援的好。

如果你要表示的向量長度較長(需要為向量內部儲存很多數),容易導致記憶體洩漏,而且效率會很低。

二維陣列初始化

std::vector vec(10,90); //將10個一維動態陣列初始為90

std::vectorvec(row,vector(col,0)); //初始化row * col二維動態陣列,初始化值為0,其實就是每一行初始化為列數個0

int size_row = vec.size(); //獲取行數

int size_col = vec[0].size(); //獲取列數

下面是leetcode上「二叉樹的層次遍歷」問題的**,其中很好地運用了二維動態陣列來解決問題,思路簡潔明瞭。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

void

pre(treenode *root,

int depth,vectorint>>

&ans));

} ans[depth]

.push_back

(root-

>val)

;pre

(root-

>left,depth+

1,ans)

;pre

(root-

>right,depth+

1,ans);}

};

而為陣列追加行數時,直接用陣列名.push_back(vector<>{}//注意此時的{}不能省去)而在某一行追加列數時,用陣列名[行數].push_back();

C vector使用方法

3.4 重要說明 在 c 中,vector 是乙個十分有用的容器。它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。vector 是同一種型別的物件的集合,每個物件都有乙個對應的整數索引值。和 string 物件一樣,標準庫將負責管理與儲...

C vector的使用方法

在c 中,vector是乙個十分有用的容器,下面對這個容器做一下總結。一 基本操作 1 標頭檔案 include,另外需要使用 using namespace std 2 建立vector物件,vectorvec 3 尾部插入數字 vec.push back a 4 使用下標訪問元素,cout 5 ...

c vector 向量 使用方法詳解

vector 是向量型別,它可以容納許多態別的資料,如若干個整數,所以稱其為容器。vector 是c stl的乙個重要成員,使用它時需要包含標頭檔案 複製 如下 include 一 vector 的初始化 可以有五種方式,舉例說明如下 1 vectora 10 定義了10個整型元素的向量 尖括號中為...