用vector取代C-style的數組



用vector取代C-style的數組
    提起數組,大家想必都很熟悉,你可以用索引和指針來操作數組,給程序設計帶來了很大的靈活性。但是你知道它有許多天生的缺陷嗎?
    首先,數組的越界可能會引起程序的崩潰(如果崩潰了,還算你走運^_^)。其次是動態性不好,包括動態改變大小,動態申請。諸如此類的事,一定會讓你傷透腦筋。有什麼辦法可以解決這些問題嗎? 你不用擔心,下面我來給大家介紹一種方法:用vector取代C-style的數組。
    關於vector我不想多說,我假設大家都瞭解temlplate 和 STL。各位在任何一本C++的書上都可以找的到這些內容的(如果沒有,那趕快把它扔掉)。那爲什麼是vector呢?我們知道vector提供了 operator[]函數,可以像數組一樣的操作,而且還有邊界檢查,動態改變大小。(從這點上deque也是可以的)。vector本來就是可以用來代替一維數組的,這裏只介紹用它來代替二維的數組。二維以上的可以依此類推。
    我們知道,C++的template參數是可以嵌套定義的,你可以這樣定義一個模板的Instance
     vector > array2(3);//注意>和>之間的空格。
     這就是我們的關鍵,array2可以保存3個向量,向量的長度是可以改變的。array2[i]返回的是第i個向量。同理,array2[i][j]返回的是第i個向量中的第j個元素。
     到這裏,你可能會得意的說:"我明白了,很簡單嗎!"。別急,還有一些細節問題:如下 vector > array2(3); array2[1][2]=9; 我保證你的程序會segement failed,原因就是你沒有指定向量的大小。用push_back函數可以解決問題:array2[1].push_back(9);但是好象不太爽。就不能用operator[]嗎?答案是肯定的。不過要多加幾個步驟,如下:
    for(int i=0;i<3;i++)
        array2[i].resize(3);
    這樣,你就定義了一個3X3的數組了(另一個3在 申明時定義的)。而且你可以隨時改變它的大小。
    其他的,你還可以用C++的異常機制來捕獲如下標越界等非法行爲。進行必要的處理。使你的程序更加的健壯。具體的方法我就不深入介紹了。留給各位自己鑽研。下面提供一個範例,供參考。
  //用vector來代替數組
  // 潘李亮2002-1-13
  //在GNU c++ Mandrake Linux7.0下通過,
  //在VC下會有變量定義問題,大家自己解決
  #include
  #include
  using namespace std;
  void main()
  {
    vector< vector > array(3);
   for(int i=0;i<3;i++)
       array[i].resize(3);//設置數組的大小3X3
      //現在你可以和使用數組一樣使用這個vector
     for(int i=0;i<3;i++)
         for(int j=0;j<3;j++)
            array[i][j]=(i*j);
     //輸出
     for(int i=0;i<3;i++)
      {
        for(int j=0;j<3;j++)
           cout<<<" ";
        cout<
       }
     array.resize(5);
     arry[3].resize(3);
     arry[4].resize(3);
     //現在是5X3的數組了
     for(int i=0;i<5;i++)
        for(int j=0;j<3;j++)
             array[i][j]=(i*j);
     for(int i=0;i<5;i++)
     {
        for(int j=0;j<3;j++)
             cout<<<" ";
       cout<

      }< 潘李亮 2002-1-21日 }>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章