用vector取代C-style的數組

來源:互聯網
上載者:User
    提起數組,大家想必都很熟悉,你可以用索引和指標來運算元組,給程式設計帶來了很大的靈活性。但是你知道它有許多天生的缺陷嗎?   
    首先,數組的越界可能會引起程式的崩潰(如果崩潰了,還算你走運^_^)。其次是動態性不好,包括動態改變大小,動態申請。諸如此類的事,一定會讓你傷透腦筋。有什麼辦法可以解決這些問題嗎?   
    你不用擔心,下面我來給大家介紹一種方法:用vector取代C-style的數組。   
    關於vector我不想多說,我假設大家都瞭解temlplate   和   STL。各位在任何一本C++的書上都可以找的到這些內容的(如果沒有,那趕快把它扔掉)。那為什麼是vector呢?我們知道vector提供了operator[]函數,可以像數組一樣的操作,而且還有邊界檢查,動態改變大小。(從這點上deque也是可以的)。vector本來就是可以用來代替一維數組的,這裡只介紹用它來代替二維的數組。二維以上的可以依此類推。   
    我們知道,C++的template參數是可以嵌套定義的,你可以這樣定義一個模板的Instance   
    vector< vector<int> >   array2(3);//注意>和>之間的空格。   
    這就是我們的關鍵,array2可以儲存3個向量,向量的長度是可以改變的。array2[i]返回的是第i個向量。同理,array2[i][j]返回的是第i個向量中的第j個元素。   
    問題到這裡,你可能會得意的說:"我明白了,很簡單嗎!"。別急,還有一些細節問題:如下   
    vector< vector<int> >   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++的異常機制來捕獲如下標越界等非法行為。進行必要的處理。使你的程式更加的健壯。具體的方法我就不深入介紹了。留給各位自己鑽研。下面提供一個範例,供參考。
     
    #include <iostream>   
    #include <vector>  
 
    using namespace std; 
  
    void main()   
    {   
        vector< vector<int> > 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 << array[i][j] << "   ";   
            cout<<endl;   
        }

        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<<array[i][j]<<"   ";   
            cout<<endl;   
        }   
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.