C++ 创建动态二维阵列

C++ 创建动态二维阵列,c++,arrays,dynamic-arrays,dynamic-allocation,C++,Arrays,Dynamic Arrays,Dynamic Allocation,我需要一个二维数组。 它的宽度约为900米。其高度和宽度值相同 处理两个循环,一个是宽度,一个是高度,我真的需要访问我将要处理的900X900图像的所有像素 指定原始和列数时,数组的大小错误太大 我想用一个动态数组来优化计算时间,并在每次处理两个循环中的一个像素时释放内存 但是我真的找不到我想要的语法来声明2D动态数组malloc,设置数组元素值并释放内存 我需要一个二维数组 因为你使用C++,你应该使用STL类来为你管理丑陋的内存管理。因此,您实际上是在寻找std::vector,或者为了代码

我需要一个二维数组。 它的宽度约为900米。其高度和宽度值相同

处理两个循环,一个是宽度,一个是高度,我真的需要访问我将要处理的900X900图像的所有像素

指定原始和列数时,数组的大小错误太大

我想用一个动态数组来优化计算时间,并在每次处理两个循环中的一个像素时释放内存

但是我真的找不到我想要的语法来声明2D动态数组malloc,设置数组元素值并释放内存

我需要一个二维数组

<>因为你使用C++,你应该使用STL类来为你管理丑陋的内存管理。因此,您实际上是在寻找std::vector,或者为了代码的可读性:

#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
然后尽可能避免使用动态分配。利用:

可能对您有帮助的问题:

我需要一个二维数组

<>因为你使用C++,你应该使用STL类来为你管理丑陋的内存管理。因此,您实际上是在寻找std::vector,或者为了代码的可读性:

#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
然后尽可能避免使用动态分配。利用:

可能对您有帮助的问题:

我把Maloc与纯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容器是一种更好的方法。

< P>我将Maloc与纯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的容器是一种更好的方法。

将其包装在类中:

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;
将其包装在类中:

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;

提示:在C++中,STD::vector是新的Maloc。900×900=4=3.2m……不多。动态数组非常慢。请提供有关您如何获取此图像以及如何处理它的更多信息。你有什么错误?它是堆栈溢出写的!例如,当它要处理图像100X100的窗口时,我对它有很好的计算,但我想处理整个图像,因此,当我将数组的元素数更改为900::ALERT with Stack over flow时。不要在堆栈上创建它。使用MALOC为数组分配内存或增加编译器选项中的堆栈大小。提示:在C++中,STD::vector是新的Maloc。900×900×4=3.2m……不多。动态数组非常慢。请提供有关您如何获取此图像以及如何处理它的更多信息。你有什么错误?它是堆栈溢出写的!例如,当它要处理图像100X100的窗口时,我对它有很好的计算,但我想处理整个图像,因此,当我将数组的元素数更改为900::ALERT with Stack over flow时。不要在堆栈上创建它。使用malloc为数组分配内存或在编译器选项中增加堆栈大小。谢谢。但是在这里,在您展示的代码示例中,如何设置所创建向量的值?@ZeusM:检查我的编辑,我添加了一些问题的链接,这些问题将对您有所帮助。谢谢您。但是在这里,在您展示的代码示例中,如何设置所创建向量的值?@ZeusM:检查我的编辑,我添加了一些链接,这些链接指向将对您有所帮助的问题。哇!结果将在几秒钟内显示!!!!!!我等了1-2分钟处理了一个300X300的小窗口,谢谢!结果将在几秒钟内显示!!!!!!我等了1-2分钟处理了一个300X300的小窗口,谢谢谢谢。非常感谢,谢谢你。非常感谢。