c++ - 设置指向任意维度数组的指针?

标签 c++ arrays multidimensional-array

当我要初始化一个多维数组时,我通常只是使用指针。例如,对于两个维度,我使用:

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/

相关文章:

python - 访问数组中的分组项目

arrays - Scala 的多维数组再一次

c++ - 初始化值太多c++

python - 重载 python 类中的 [] 运算符以引用 numpy.array 数据成员

c++ - 在不将类作为参数的情况下在成员函数内创建仿函数

c++ - 关闭后等待文件删除

c++ - 将数学计算写成变量初始化中常量表达式的值会增加计算量吗?

c++ - 不明白为什么这个 std::cout 打印这个

c - 两个数组的交集 - C

ios - 显示组合数组中的文本标签(使用 API)