C++ vector是什麼?應該如何理解
轉載地址:http://hi.baidu.com/phpok/item/b2df4db0ab6925f262388eab
最近有幾個好友問到我C++中的vector到底怎麼理解它,很多人沒有接觸過它。一時間都被搞的暈頭轉向。其實vector很好理解,它就是可以動態創建對象元素個數的數組。如果你不知道什麼是數組那就別浪費時間看下去。因爲在C++中數組元素個數的定義只能夠使用常量值,或在編譯時就可以獲得的值。列如
const int ay=5;
int array[ay];
或者
int array[5];
不可以使用
int ay;
int array[ay];
這種定義的方式。所以,數組元素的個數在C++中除了使用NEW表達式(比較麻煩)之外是不可以動態定義的。那麼如何解決這個問題呢。
C++推出了標準庫vector
在使用它的時候需要首先引頭文件
#include <vector>
using std::vector;
接下來用幾個簡單的列子來說明它和數組的區別。
01 /********************************************************************
02 創建時間: 2009/09/21 21:11
03 文件名稱: test1.cpp
04 文件後綴: cpp
05 文件作者: QianLiang
06
07 =====================================================
08 功能說明: 說明什麼是vector以及它與數組的區別
09 -----------------------------------------------------------------
10 其他說明:
11 *********************************************************************/
12 #include <iostream>
13 #include <vector>
14 using namespace std;
15
16 int main()
17 {
18 /* 數組:靜態定義元素個數 */
19 const int ay=5;
20 int array1[ay];
21
22 /* vector:動態定義元素個數 */
23 int vy;
24 cin>>vy;
25 vector<int> ivec1(vy);
26
27 /* 測試它們每個元素的默認值,這裏假設上面的vy輸入爲5 */
28 for (int i=0;i<ay;++i)
29 {
30 cout<<"數組:\t"<<array1[i]<<endl; //它輸出的全是隨即數
31 cout<<"vector:\t"<<ivec1[i]<<endl;//它將全部元素初始化爲0
32 cout<<endl;
33 }
34
35 /* 測試他們的賦值安全性 */
36 int array2[6];
37 //array1=array2; ←這條語句就是錯誤的.而
38 vector<int> ivec2(3);
39 ivec1=ivec2; //這條語句是正確的因爲它可以動態的確定元素個數
40
41
42 /* 僅僅以上三條測試就足以說明使用vector比數組要安全的多,
43 第一它是動態的管理元素個數,這就避免了許多越界問題的發生
44 第二當未對它們進行初始化操作的時候vector會自動爲每個元素添加
45 該類型的安全默認值.這也避免了若干問題的發生.
46
47 接下來看看vector的使用,它有4個構造函數
48 vector<T> v1; ←vector保存類型爲T的對象.默認構造函數v1爲空
49 vector<T> v2(v1); ←V2是V1的一個副本.
50 vector<T> v3(n,i); ←v3包含n個值爲i的元素.
51 vector<T> v4(n); ←v4含有值初始化的元素的n個副本.*/
52
53 /* vector的操作 */
54 cout<<ivec1.empty();//如果ivec1爲空則返回true(1),否則返回false(0)
55 cout<<ivec1.size();//返回ivec1中元素的個數;
56 ivec1.push_back(t) //在ivec1的末尾增加一個值爲t的元素.
57
58 return 0;
59 }
什麼時候使用vector什麼時候使用數組呢?
**由於vector是標準庫,而數組則是內置類型。所以如果你追求程序的執行效率的話那就用數組吧。
**可確定數組元素個數的時候儘量使用數組。
**對於指針以及NEW操作符迷糊的時候使用vector,因爲它內置有內存管理器。
下面是一個關於vector的編程習題。
01 /********************************************************************
02 創建時間: 2009/09/21 21:18
03 文件名稱: 習題3-13.cpp
04 文件後綴: cpp
05 文件作者: QianLiang
06
07 =====================================================
08 功能說明: 讀一組整數到vector對象,計算並輸出每對相鄰元素的和.如
09 果讀入元素個數爲奇數,則提示用戶最後有一個元素沒有求和
10 ,並輸出其值.然後修改程序:首尾元素兩兩配對(第一個和最
11 後一個,第二個和倒數第二個,以次類推),計算每對元素的和
12 並輸出.
13 -----------------------------------------------------------------
14 其他說明:
15 *********************************************************************/
16 #include <iostream>
17 #include <vector>
18 using namespace std;
19
20 int main()
21 {
22 vector<int> ve;
23 int a(0);
24 const int CI(2);
25
26 cout<<"輸入整數,程序計算它們相鄰數的和.輸入0時程序開始計算"<<endl;
27 /* 請求用戶輸入整數,每個數字爲ve的一個元素,如果用戶輸入0
28 程序將停止請求*/
29 while (cin>>a && a!=0)
30 {
31 ve.push_back(a);
32 }
33
34 /* 統計ve的元素個數減1後賦給變量b */
35 int b(ve.size()-1);
36
37 /* 判斷用戶是否直接輸入了0,或是鍵盤上的任意鍵 */
38 if (ve.size()==0)
39 {
40 cout<<"無元素"<<endl;
41 }
42
43 /* 判斷用戶輸入元素的個數是否爲奇數 */
44 else if (ve.size()%CI != 0)
45 {
46 /* 判斷用戶是否只輸入了一個數字 */
47 if (ve.size()==1)
48 {
49 cout<<"一個元素無法計算"<<endl;
50 }
51 else
52 {
53 cout<<"您輸入的元素個數是奇數,最後一個數字無法相加"<<endl;
54 for (int i=0;i<b;i+=CI)
55 {
56 cout<<"第"<<i+1<<"組數:"<<ve[i]+ve[i+1]<<endl;
57 }
58
59 cout<<"您輸入的最後一個元素爲:"<<ve[b]<<endl;
60 }
61 }
62
63 /* 判斷用戶輸入的元素個數是否爲偶數 */
64 else if (ve.size()%CI == 0)
65 {
66 for (int i=0;i<b;i+=CI)
67 {
68 cout<<"第"<<i+1<<"組數:"<<ve[i]+ve[i+1]<<endl;
69 }
70 }
71
72 return 0;
73 }