繁体   English   中英

C++ 上二维数组的大小

[英]Size of 2D array on C++

我已经使用以下方式声明了一个二维数组

for(int i = 0; i < rowCount; ++i){//rowCount = 5
   a[i] = new int[colCount]; //colCount = 6
}

我想检查这个数组的大小,我知道我可以看看我把它放在声明数组中的数字,但我想看看代码是否按我预期的方式工作。

我使用“sizeof(a)/sizeof(a[0])”来获取行数,但没有给出预期的数字

问题是a并没有真正保存二维数组。 您应该将其视为a数组数组。 因此,大小a仅仅是5,而在每个数组的大小a是6(请记住,没有任何限制,在每个阵列a将相同大小)。 如果你真的想计算总大小,你应该迭代a并对所有行的大小求和。

您可以按照建议使用std::vector<std::vector>>并采用它们的.size()方法,但这并不是最适合内存的方法。 我建议将您的数组数组(又名指针指针)包装在一个小型专用类中,该类在内部跟踪大小,允许您访问原始数据,并且还具有getWidthgetHeight函数。 您还可以轻松地为其提供方便的功能,例如.setAll(T value)并使用模板来支持任何数据类型。

// Example program
#include <iostream>
#include <string>

template<class T>
class RawGrid 
{
    private:
        int width, height;

    public:

        RawGrid(int width, int height) : width(width), height(height)
        {
            data = new T*[width];
            for(int i = 0; i < width; i++)
                data[i] = new T[height];
        }
        ~RawGrid()
        {
            if (data)
            {
                for(int i = 0; i < width; i++)
                    delete[] data[i];
                delete[] data;                
            }
        }

        int getWidth() {
            return(width);
        }
        int getHeight() {
            return(height);
        }

    T** data = nullptr;
};


int main()
{
    RawGrid<int> grid(100, 50);

    grid.data[10][25] = 20;

    std::cout << "Data value: " << grid.data[10][25] << "!\n";
    std::cout << "Width: " << grid.getWidth() << "!\n";
    std::cout << "Height " << grid.getHeight() << "!\n";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM