我需要一个二维数组。它的宽度大约是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