将动态二维数组中的所有值设置为一个设定值
setting all values in a dynamic 2 d array to a set value
我必须设置一个动态二维数组,即x行数乘y列数。该数组已被声明为枚举类型,我希望将所有值初始化为已知值EMPTY。是否有一种方法来做到这一点与一个单一的命令或我需要循环通过每一行/列abd设置它的方式。我知道静态数组可以做Array[][] = {EMPTY},但我不能得到这个方法的工作。
status ** seats;
seats = new status* [NO_OF_ROWS];// declare array with NO_OF_ROWS
for (row = 0; row < NO_OF_ROWS; row++)
seats[row] = new status[NO_OF_SEATS];
是:
#include <vector>
typedef std::vector< std::vector<status> > seat_type;
seat_type seats(NO_OF_ROWS, std::vector<status>(NO_OF_SEATS));
// now use seats[i][j] etc.
在c++中,一个"动态数组"叫做std::vector
。
如果您想避免许多动态分配,您可以选择使用单个向量
std::vector<status> seats(NO_OF_ROWS * NO_OF_SEATS);
并以步进方式访问,即(i,j)
座位为seats[j + NO_OF_SEATS * i]
。
您可以尝试使用memset
-如您所知,C中的数组在内部定义为连续内存块。另一方面,memset
是一个用特定值填充特定内存块的函数。
现在,由于您的二维数组不是连续的(因为您有一个指针数组),您将无法仅调用一次'memset',但至少您可以对每一行调用它,这意味着您将调用NO_OF_ROWS数次。
应该类似于以下内容(注意可能需要一些类型转换,而且我的c++有点生疏):
for (row = 0; row < NO_OF_ROWS; row++)
{
seats[row] = new status[NO_OF_SEATS];
memset(seats[row],EMPTY,NO_OF_SEATS*sizeof(status));
}
为什么不用vector代替呢?虽然它的语法看起来很可怕,但在理解了逻辑之后就很容易了。
首先添加vector库:
#include <vector>
下面是如何声明2D向量:
vector<vector<int> > array(4,vector<int>(3));
现在array
是一个有4个单元格的向量,每个单元格是一个有3个单元格的向量,换句话说,array
是二维的。
Ok。下面是如何将所有单元格分配给-1:
vector<vector<int> > array(4,vector<int>(3,-1));
我希望它能帮上忙。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何设置一个范围来提取我想要获得的信息
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 将双精度变量设置为另一个变量的值
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- C++设置了一个用于排序的比较器和另一个用于唯一性的比较器
- 如何设置默认参数以防用户不输入另一个参数
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++如何将字符串数组中的一个点设置为枚举变量
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 如何设置一个简单的CGAL+Qt程序
- 是否可以为一个循环设置多个条件
- 在C++中设置仅包含每个类的一个外观的数据结构
- 如果我有五个 Win32 静态控件,如何使用特定的前景色设置其中一个?
- 有人可以给我一个设置和检索unique_ptr的简单示例吗?
- 在c++中强制打开一个设置大小的终端窗口
- 在理解指针指向一个设置为NULL的对象时出现问题
- C++将两个变量中较大的一个设置为新值