[英]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()
方法,但这并不是最适合内存的方法。 我建议将您的数组数组(又名指针指针)包装在一个小型专用类中,该类在内部跟踪大小,允许您访问原始数据,并且还具有getWidth
和getHeight
函数。 您还可以轻松地为其提供方便的功能,例如.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.