非均匀多维数组上的C ++迭代

时间:2012-02-27 14:35:45

标签: c++ arrays multidimensional-array

考虑以下C ++代码示例:

int array_1[] = {5,6,7};
int array_2[] = {6,7,8,9};
int array_3[] = {2,3};

int* meta_array[] = {array_1, array_2, array3};

现在我想迭代meta_array子数组中的所有元素而不会导致seg错误。

问题当然是我无法获得数组的大小以避免超出其范围。

我可以sizeof array_1 / sizeof array_1[0]来快速获得常见的1维数组的大小,但是当我在meta_array时,每个元素都被转换为指针,所以{ {1}}将返回指针的字节大小而不是整个数组。因此,sizeof并没有真正帮助我的事业。

是否有一个标准的解决方案来迭代非均匀的多维数组,或者我应该继续使用std :: vector?

2 个答案:

答案 0 :(得分:2)

使用std::vector

或使用“结束”数字,但您必须确保不会有任何具有该值的元素。

int array_1[] = {5,6,7,-1};
int array_2[] = {6,7,8,9,-1};
int array_3[] = {2,3,-1};

int*  meta_array[] = 
{
  array_1, 
  array_2, 
  array_3,
  NULL
};

for(int i=0; meta_array[i] != NULL; ++i)
{
   for(int j=0; meta_array[i][j] != -1; ++j)
       printf("%d",  meta_array[i][j]);
   printf("\n");
}

答案 1 :(得分:0)

您会从Boost.MultiArray

中获得极大的好处