在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個整型元素的向量 尖括號中為...