關於vector二維動態陣列初始化
阿新 • • 發佈:2019-02-13
很多時候,我們要使用動態陣列來儲存一開始未知數量的資料時,往往都是在程式中得到行數和列數,然後再對陣列進行初始化。可是,如果我們只知道行或者列其中的一個數量,可以進行動態陣列初始化嗎?
答案是可以的。如果我們知道行數,那麼初始化可以如此寫: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的一些心得,希望可以給觀者啟發。有錯誤望指正!謝謝