1. 程式人生 > >關於vector二維動態陣列初始化

關於vector二維動態陣列初始化

       很多時候,我們要使用動態陣列來儲存一開始未知數量的資料時,往往都是在程式中得到行數和列數,然後再對陣列進行初始化。可是,如果我們只知道行或者列其中的一個數量,可以進行動態陣列初始化嗎?

       答案是可以的。如果我們知道行數,那麼初始化可以如此寫:vector<vector<type>>Name(row,vector<type>(0))。這樣的含義是:行數為row,列數為0。那如何對這個陣列賦值呢?例如簡單做一個已知3行,但是不知道每行列數的二維矩陣M:

vector<vector<int>>M(3,vector<int>(0));//初始化M,行為3,列為0
vector<int>N(3);
for(int i=0;i<3;i++){
N.push_back(i+1);
}
for(int i=0;i<M.size();i++){
for(int j=0;j<N[i];j++){
M[i].push_back(1);
}
}

        這樣,二維陣列M中的資料就是:

1

   1 1

      1 1 1

       這樣做的好處是使列動態化,即每行的列數可以不相等。這樣初始化要注意不能使用M[i][j]=xx,的賦值語句,因為會超出陣列的界限,只能用push_back,增加列的長度。

       如果出現列已知行未知的情況怎麼辦?很簡單,就把行和列對換一下儲存就可以了,舉個例子,要儲存N個點的(x,y)座標,習慣性是N*2,但是現在可以2*N,第一行存x,第二行存y。這樣列就可以動態了。其實有時候思維就是要轉換一下,不正面解決問題,而是旁敲側擊,往往會有奇效。

       以上是使用vector的一些心得,希望可以給觀者啟發。有錯誤望指正!謝謝