初探Vector

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   }

發佈了19 篇原創文章 · 獲贊 10 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章