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,这是最大值。有效的方法是什么?
感谢。
答案 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}};
如果您知道没有“实际”数据元素为零,则可以在找到零元素时停止循环。否则,您需要以不同方式设置数据。