将动态二维数组中的所有值设置为一个设定值

setting all values in a dynamic 2 d array to a set value

本文关键字:一个 设置 二维数组 动态      更新时间:2023-10-16

我必须设置一个动态二维数组,即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));

我希望它能帮上忙。