我需要一個二維數組。它的寬度大約是900.它的高度也一樣(寬度值相同)。創建一個動態二維數組
爲了處理兩個循環(一個用於寬度和一個用於高度),我真的需要訪問我要處理的900X900圖像的所有像素。
數組的大小太大(指定原始數和列數時出錯)。
我想過用動態數組來建立它,以優化計算時間並在每次處理兩個循環中的一個像素時釋放內存。
但我真的找不到我想要聲明2D動態數組(malloc,設置數組元素值和釋放內存)的語法。
我需要一個二維數組。它的寬度大約是900.它的高度也一樣(寬度值相同)。創建一個動態二維數組
爲了處理兩個循環(一個用於寬度和一個用於高度),我真的需要訪問我要處理的900X900圖像的所有像素。
數組的大小太大(指定原始數和列數時出錯)。
我想過用動態數組來建立它,以優化計算時間並在每次處理兩個循環中的一個像素時釋放內存。
但我真的找不到我想要聲明2D動態數組(malloc,設置數組元素值和釋放內存)的語法。
我需要既然你用C有
double
一個二維數組++,你應該使用會照顧醜陋的內存管理,爲您STL類。所以,你實際上是在尋找std::vector< std::vector<double> >
,或爲您的代碼的可讀性的原因:
#include <vector>
typedef std::vector<double> DVector; // row represented by vector of doubles
typedef std::vector<DVector> MyVector; // 2D array as a vector of these rows
然後避免使用動態分配,無論它有可能這樣做。充分利用RAII idiom:
{
MyVectorarr; // vector object with automatic storage duration
} // <-- vector is automatically destructed when execution goes out of scope
問題,可以幫助你:
Multi-dimensional vector
Initialization of a vector of vectors?
vector of vector
謝謝你。但是,在這裏,您已經展示的代碼示例中,如何設置創建的矢量的值? – 2013-03-07 13:57:24
@ZeusM:檢查我的編輯,我添加了鏈接到問題,將幫助你。 – LihO 2013-03-07 14:02:12
感謝您的有用信息@LihO – 2013-03-07 14:09:12
我的malloc純C,不是C++(如現有答案要點YOUT,你應該聯想使用std :: vector)。但是,如果你真的想:
// allocate the memory in a block
double* block = (double *) malloc(sizeof(double) * xSize * ySize);
// allocate memory for the accessor array
double* accessor = (double*) malloc(sizeof(double*) * xSize);
// assign memory addresses
double* curPtr = block;
for (int i = 0; i < xSize; ++i) {
accessor[i] = curPtr;
curPtr += ySize;
}
// you can now access the array via accessor[x][y]
// now need to free malloced memory:
free(accessor);
free(block);
如果你做這種方式,我強烈建議其直接連接到RAII模式,否則你會最終獲得一個內存泄漏。使用STL的容器是一種更好的方法。
謝謝你。真的很感激它。 – 2013-03-07 14:08:54
包裝在一個類:
class Matrix2D {
typedef std::vector<double> Column;
std::vector<Column> columns;
public:
Matrix2D(unsigned int width, unsigned int height) :
columns(width, Column(height)) {
}
double& at(unsigned int i, unsigned int j) {
return columns[i][j];
}
};
Matrix2D matrix(900, 900);
matrix.at(45, 65) = 1234.5678;
Waaw!結果顯示在幾秒鐘內!!!!!! 我等了1-2分鐘來處理整個圖像的一個小窗口(300X300) 謝謝 – 2013-03-07 14:08:22
提示:在C++中,'的std :: VECTOR'是新的'malloc'。 – dasblinkenlight 2013-03-07 13:43:04
900х900х4= 3.2M這不算什麼......動態數組很慢。給我們更多關於你如何獲得這張圖片以及如何處理它的信息。你有什麼錯誤? – Leonidos 2013-03-07 13:50:25
這是寫在堆疊流! – 2013-03-07 13:52:47