当我要初始化一个多维数组时,我通常只是使用指针。例如,对于两个维度,我使用:
double **array
对于三个我使用:
double ***array
但是,我想根据指示维度的命令行参数设置多维数组。一旦您有一个具有您想要的维数的变量,是否有办法设置任意大小的数组?
最佳答案
即使这整个问题表明存在设计缺陷,您也可以(某种程度上)完成此操作:
template<typename T>
class MultiArray
{
public:
MultiArray(std::size_t dimen, std::size_t dimen_size) : _dimensions(dimen)
{
_data = new T[dimen * dimen_size];
}
// implment copy constructor, copy-assignment operator, destructor, and move constructors as well
T* operator[](int i)
{
assert(0 <= i && i < _dimensions); // bounds check for your dimension
return &_data[i];
}
private:
T* _data;
std::size_t _dimensions;
};
int main()
{
MultiArray<int> a(5, 2);
a[4][1] = 3;
std::cout << a[4][1] << std::endl;
return 0;
}
如果您希望它呈锯齿状,您将不得不对每个“维度”的边界进行更多的数学计算和维护。
您遇到的问题是让尺寸对您的应用程序有意义。通常,多维数组表示某些东西(例如,2D vector 可以表示笛卡尔空间,3D 或 4D vector 可用于处理 3D 图形的数据)。在第 4 维之外,找到数组的有效含义变得模糊,维护它背后的逻辑随着每个新维度变得越来越复杂。
关于c++ - 设置指向任意维度数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709529/