如果您要讀取或修改矩陣的位置,那可以,但是您要修改矩陣本身。在你的例子中,你需要創建另一個矩陣。
編輯:我修改了這個使用unique_ptr,因爲評論(雖然我不認爲OP是真的準備好/對此感興趣)。
EDITED我知道你可以轉置矩陣「就地」。然而,這不是OP的問題。感謝所有關於此的評論者。
std::unique_ptr<>
是一個讓你管理指針的類,保證指針在使用後會自動刪除。選項將是auto_ptr
。不幸的是,它不支持數組的向量。 unique_ptr
支持它們,儘管它是新標準C++ - 0x的一部分。
所以,你需要修改轉置到正規參數:
void transpose(std::unique_ptr<float**> &array, int rows, int columns)
{
std::unique_ptr<float **> aux = array;
array.reset(new float[columns][rows]);
// now transpose aux into array
}
這也意味着,當你做你無法創建原始數組:
float array[5][4];
這是一個矩陣堆棧,你不能指望修改指針本身,它沒有任何意義。更好,如果你這樣做:
int main()
{
std::unique_ptr<float **>array(new float[5][4]);
transpose(array, 5, 4);
// ... use array ...
}
這就是說,另一種解決方案是稍微改變轉置過程的簽名,並使它成爲一個功能。
std::unique_ptr<float **> transpose(float** array, int rows, int columns)
{
std::unique_ptr<float **> toret(new float[columns][rows]);
// now transpose array into toret
// end
return toret;
}
..和你不需要改變任何東西在你的程序。
int main()
{
float array[5][4];
std::unique_ptr<float **> transposed(transpose(array, 5, 4));
// ... more things ...
}
float ** array;正在工作...,爲什麼? – olidev
您粘貼的「錯誤」引用的類型在您發佈的代碼中無處可用。 – Mat
您的錯誤狀態是您正在玩一個向量<>類,這是無處可尋找您的代碼... –