繁体   English   中英

将一维动态数组转换为N维

[英]Inversion of a one-dimensional dynamic array into an N-dimensional

帮助您了解数组的创建:任务是动态构建具有任意数量的测量值和任意深度的数组。 输入接收具有任意(n)个元素的一维数组int arr [] 例如,我们可以创建一维数组,例如int arr= new int[size] ,我们可以创建二维数组int **arr= new int*[size] ,依此类推,但是当我们不创建时如何创建它不知道有多少尺寸? 我刚开始学习C ++,所以我不能使用面向对象的编程和矢量

正如其中一些评论者所建议的那样,您可以做的一件事是创建一个大型的一维数组而不是多维数组,例如

int *arr = new int[wLength * zLength * yLength * xLength];

而不是像这样用arr[w][z][y][x]索引: arr[w * zLength * yLength * xLength + z * yLength * xLength + y * xLength + x]

当然,如果您想要N维数组的类型(给定N是一个常量表达式),则可以使用带有重载的模板,如下所示:

template <typename T, int N>
struct NDimensionalArray {
    typedef typename NDimensionalArray<T, N-1>::Type *Type;
};

template<typename T>
struct NDimensionalArray<T, 0> {
    typedef T Type;
};

使用该定义,您将获得以下类型:

std::is_same<NDimensionalArray<char, 1>::Type, char*>::value; // true
std::is_same<NDimensionalArray<char, 2>::Type, char**>::value; // true
std::is_same<NDimensionalArray<char, 3>::Type, char***>::value; // true

封装的N维数组类,用于更新,删除和索引到N维数组中,这是一个练习。 (提示:使用std::array<unsigned int, N>表示创建/删除时的大小,以及在索引为一个时的索引)。

暂无
暂无

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

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