2013-01-04 177 views
0

有人可以解釋下面標記行的意義嗎?通常它正在初始化矩陣。矩陣初始化

讓我們假設size = 3.然後它應該創建一個有6個位置的矩陣,即1x6矩陣。但每次都需要第二行。爲什麼每次都會推-1?

for (unsigned i = 0; i < size(); i++) { 
    vector<int> *t = new vector<int>;  // (1) 
    for (unsigned j = 0; j <= i; j++) { 
     t->push_back(-1);     // (2) 
    } 
    matrix.push_back(*t); 
} 
+5

使用指向矢量的指針,然後動態地分配它,就像擊敗使用矢量的目的一樣好。使用什麼錯誤:'std :: vector t;'? –

+0

實際上,我從一個程序中選擇了一部分代碼,該程序使用了一組由我的主管實施的類。我不確定她是如何使用它的。 – NRK

+0

嘿,我在這裏新來的。不幸的是,其中一個答案在我不知情的情況下被刪除了。真的很抱歉。 – NRK

回答

1

該代碼構造並初始化方形矩陣的上部或下部(取決於指數的解釋)三角形。行(1)分配新的行或列向量。行(2)使用任意值初始化直到幷包括矩陣對角線的值(-1)。爲什麼代碼使用-1作爲初始值只能通過檢查代碼或閱讀附帶的文檔來回答。

除了功能行(1)產生內存泄漏。由於matrix未取得t的所有權,因此t超出範圍時無法回收內存。更正後的代碼應該是這樣的:

for (unsigned i = 0; i < size(); i++) { 
    vector<int> t;  // (1) 
    for (unsigned j = 0; j <= i; j++) { 
     t.push_back(-1); // (2) 
    } 
    matrix.push_back(t); 
} 

注意線(1)分配,當它超出範圍時自動銷燬的對象。這可以修復原始代碼中的內存泄漏。假設大小爲3,則會生成:

-1 -1 -1   -1 
    -1 -1 or -1 -1 
     -1   -1 -1 -1 

取決於矩陣的第一個索引是引用行還是列。

+0

感謝兄弟。在這裏,稍後在程序中,一些值將在經過一些計算後被放置在矩陣變量中。 – NRK