将动态2 d数组中的所有值设置为设定值

时间:2011-12-03 21:04:38

标签: c++ arrays initialization

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

3 个答案:

答案 0 :(得分:3)

是:

#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) th 席位为seats[j + NO_OF_SEATS * i]

答案 1 :(得分:0)

您可以尝试使用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));
}

答案 2 :(得分:0)

您为什么不使用vector呢?尽管它的语法似乎令人恐惧,但在理解逻辑之后会很容易。

首先添加矢量库:

#include <vector>

以下是声明2D向量的方法:

vector<vector<int> > array(4,vector<int>(3));

现在array是具有4个单元的向量,每个单元是具有3个单元的向量,也就是说array是2D。

好的。这是将所有单元分配给-1的方法:

vector<vector<int> > array(4,vector<int>(3,-1));

我希望它能对您有所帮助。