久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

用vector解決c++中動態(tài)生成二維數(shù)組[轉(zhuǎn)]

 昵稱10973579 2012-10-24
用vector取代C-style的數(shù)組     
    提起數(shù)組,大家想必都很熟悉,,你可以用索引和指針來操作數(shù)組,,給程序設(shè)計帶來了很大的靈活性,。但是你知道它有許多天生的缺陷嗎?   
    首先,,數(shù)組的越界可能會引起程序的崩潰(如果崩潰了,,還算你走運^_^)。其次是動態(tài)性不好,,包括動態(tài)改變大小,,動態(tài)申請。諸如此類的事,,一定會讓你傷透腦筋,。有什么辦法可以解決這些問題嗎?   
    你不用擔(dān)心,,下面我來給大家介紹一種方法:用vector取代C-style的數(shù)組,。   
    關(guān) 于vector我不想多說,我假設(shè)大家都了解temlplate   和   STL,。各位在任何一本C++的書上都可以找的到這些內(nèi)容的(如果沒有,,那趕快把它扔掉)。那為什么是vector呢,?我們知道vector提供了 operator[]函數(shù),,可以像數(shù)組一樣的操作,而且還有邊界檢查,,動態(tài)改變大小,。(從這點上deque也是可以的)。vector本來就是可以用來代 替一維數(shù)組的,,這里只介紹用它來代替二維的數(shù)組,。二維以上的可以依此類推。   
   我們知道,,C++的template參數(shù)是可以嵌套定義的,,你可以這樣定義一個模板的Instance   
    vector<vector<int>     >   array2(3);//注意>和>之間的空格。   
   這就是我們的關(guān)鍵,,array2可以保存3個向量,,向量的長度是可以改變的。array2[i]返回的是第i個向量,。同理,,array2[i][j]返回的是第i個向量中的第j個元素。   
   問題到這里,,你可能會得意的說:"我明白了,,很簡單嗎!",。別急,,還有一些細節(jié)問題:如下  
            vector<vector<int>     >   array2(3);  
            array2[1][2]=9;   
   我 保證你的程序會segement   failed,原因就是你沒有指定向量的大小,。用push_back函數(shù)可以解決問題:array2[1].push_back(9);但是好象不太爽。 就不能用operator[]嗎,?答案是肯定的,。不過要多加幾個步驟,如下:  
              for(int   i=0;i<3;i++)  
                    array2[i].resize(3);   
   這樣,,你就定義了一個3X3的數(shù)組了(另一個3在   申明時定義的),。而且你可以隨時改變它的大小。  

    其他的,,你還可以用C++的異常機制來捕獲如下標越界等非法行為,。進行必要的處理。使你的程序更加的健壯,。具體的方法我就不深入介紹了,。留給各位自己鉆研。下面提供一個范例,,供參考,。     
      #i nclude   <iostream>  
      #i nclude   <vector>  
      using   namespace   std;  
      void   main()  
      {  
              vector<   vector<int>   >   array(3);  
              for(int   i=0;i<3;i++)  
                  array[i].resize(3);//設(shè)置數(shù)組的大小3X3  
                    //現(xiàn)在你可以和使用數(shù)組一樣使用這個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);  
              //現(xiàn)在是5X3的數(shù)組了  
              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;  
              }  
      }

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多