所以我开始学习用C ++编写代码而我刚刚开始使用数组,但我只是不理解多维数组的概念,它是否节省了内存并使程序更快或其他什么?而且在什么情况下我应该使用它们?
由于
答案 0 :(得分:2)
不是特别回答C或C ++。
想象一下棋盘,它有一些正方形。每个广场上都有一个游戏片。您可以将每个方块的状态存储在一个数组中。
如果您对方块0,1,2,3 ... 63进行编号,则可以将它们放在一维数组中。向左移1加,向右减1,向下加宽(8),向上减去宽度(8)(用一些边界检查)。
或者你可以使用2维数组0 ... 7,0 ... 7现在你不添加8你只需要添加一个y维。请注意,计算机最终将其全部转换为一维,但C和C ++数组没有边界检查,您必须不断地告诉它宽度。图书馆里有一些很好的课程可以让事情变得更容易。
此外,您可以拥有3,4,5或任何其他数量的尺寸。
答案 1 :(得分:0)
你只是在实践中得到它!你使用二维数组的情况很多,只是因为它不足以使用一个简单的数组,例如简单的回溯问题,如迷宫,数独,lee的算法。或者另一个例子:你有一个班级学生数据表,列是每个学生的数据,但是原始数据可以是:第一个原始平均成绩,第二个原始高度,第三个原始数字,以及等等
答案 2 :(得分:-3)
实际上,不要在C或C ++中使用多维数组。只需使用单维数组,也许使用包含getter和setter方法的class
包含它。
但是,在很多情况下你会使用一个容器容器,例如类似std::set<std::vector<long>>
或偶尔std::vector<std::array<double,3>>
等类型...
使用原始 2D数组的实际异常可能适用于维度为编译时常量的矩阵。因此,3D线性变换(从 R 3 到它自身)可能由double m[3][3];
表示;然后好的optimizing compiler甚至可以vectorize代码。
但对于一个矩阵,其两个维度仅在运行时已知,使其成为二维数组通常是一个错误或过度杀伤(这就是STL没有为您提供std::matrix
模板的原因)。您可以使用std::vector<std::vector<double>>
,但这需要分配矩阵的每一行。
当然,你会发现很多现有的线性代数库,如LAPACK,BLAS等......用它们进行2D或3D计算。其中一些甚至可能使用硬件加速(例如使用OpenCL在GPGPU上运行)。
更一般地说,您经常应该使用和组合现有的C ++ standard containers(甚至可以定义您自己的模板,提供您的容器,也许通过组合现有的容器)。