从二维初始化数组中访问值

时间:2011-03-24 00:34:31

标签: c++ multidimensional-array

int a[][30]={{2, 16},{4, 8},{5, 16, 21},{2,6,3,5,6}};

由于第二维的大小是变化的。如果我想访问特定值i(第一维)的内容,请访问所有j值(第二维),如何编写该语句?

我的想法是:

for(int j=0;j<30;j++)
  a[i][j]=some operation;

但它不必要地循环到30,这是最大值。有效的方法是什么?

感谢。

2 个答案:

答案 0 :(得分:2)

两个尺寸的大小都是固定的。外部维度的大小为4,内部的大小为30

如果迭代内部维度,那么您将打印许多零,因为这是初始化未显式初始化为的剩余整数。

你似乎想要这个:

std::vector<int> a[] = { 
   boost::list_of(2)(16), 
   boost::list_of(4)(8), 
   boost::list_of(5)(16)(21), 
   boost::list_of(2)(6)(3)(5)(6) 
};

答案 1 :(得分:2)

编译器不会保留有关括号初始化程序中有多少值的任何信息。相反,它用零填充“缺失”值。

所以这两个是等价的:

int a[][4] = {{2, 16},{4, 8, 5}};
int a[][4] = {{2, 16, 0, 0}, {4, 8, 5, 0}};

如果您知道没有“实际”数据元素为零,则可以在找到零元素时停止循环。否则,您需要以不同方式设置数据。