多维数组的目的以及何时使用它们
Purpose of multidimensional arrays and when to use them?
所以我已经开始学习在c++编码,我刚刚开始对数组,但我只是不理解多维数组的概念,它节省内存,使程序更快或其他什么?在什么情况下我应该使用它们?
谢谢
答案不是C或c++。
想象一个棋盘,它有一些方块。每个方格上都可以有一个棋子。您可以将每个方格的状态存储在数组中。
如果你将方块编号为0,1,2,3…63,那么你可以将它们放入一维数组中。向左加1,向右减1,向下加宽度(8),向上减宽度(8)(有一些边界检查)
或者你可以使用二维数组0…7,0…7现在你不加8,你只加1到y维。请注意,计算机最终将其全部转换为一维,但C和c++数组没有边界检查,您必须不断告诉它宽度。库中有一些很好的类可以使事情变得更容易。
也可以设置3、4、5或其他任何维度
你会在实践中得到它!在很多情况下,你会使用二维数组,因为仅仅使用一个简单的数组是不够的,比如简单的回溯问题,比如迷宫,数独,李氏算法。或者另一个例子:您有一个班级学生的数据表,列是每个学生的数据,但是raw可以是:第一个raw是平均成绩,第二个raw是他的身高,第三个raw是他的数字,等等
在实践中,不要在C或c++中使用多维数组。只要使用一个单一维度的数组,也许通过创建一个包含它的class
和一些getter和setter方法。
然而,在许多情况下,您将使用容器的容器,例如std::set<std::vector<long>>
或偶尔std::vector<std::array<double,3>>
等类型…
使用raw 2D数组的实用异常可能用于维度为编译时常量的矩阵。因此,三维线性变换(从R3到自身)可以用double m[3][3];
表示;然后一个好的优化编译器甚至可以对代码进行矢量化。
但是对于一个只有在运行时才知道两个维度的矩阵,使它成为一个二维数组通常是一个错误或过度(这就是为什么STL不提供std::matrix
模板)。您可以使用std::vector<std::vector<double>>
,但这需要分配矩阵的每一行。
更一般地说,您应该经常使用和组合现有的c++标准容器(甚至可以通过组合现有的容器来定义您自己的模板)。
- std::vector的包装器,使数组的结构看起来像结构的数组
- c++使用foreach使数组为null
- 通过交换元素使数组相同
- 按下回车键时,如何使数组停止读取字符
- 推荐的方法在不初始化值的情况下使数组类型为 std::unique_ptr?
- 如何使数组以单词而不是数字的形式出现
- 具有空构造函数使数组未初始化会使计算速度变慢
- 使数组的内存效率更高
- 如何使数组调用另一个类中的函数
- 使数组(char)1在stdio.h上给出错误
- 如何使数组的派生类型接受聚合初始化?
- 使数组成为 c++ 函数的可选参数
- 何时从数组删除类指针
- C++:如何使数组全局可访问
- 如何使数组包含从基类继承的类
- 如何使数组变量指向不同的数组,有效地将第二个数组的内容复制到第一个数组中
- 如何使数组中的每个数字都存储一个字符串,就像constchar*argv[]所做的那样
- 如何使数组表现得像向量
- 更改数组,使数组中的最大元素必须是最小元素
- 如何使数组无效