从1d数组创建2d数组

时间:2012-12-18 15:19:34

标签: c++ multidimensional-array

如果我有几个相同数据类型的数组,那么将它们全部复制到二维数组中的最佳方法是什么。例如

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int array2d[][];
//pseudo code array2d = array1 + array2

这样

array2d[0][0]; //=1 (first member of array1)
array2d[1][0]; //=9 (first member of array2)

考虑到数组只是指向第一个元素的指针,我认为我可以这样做,但它会产生编译错误。

array2d[0][0] = array1;
array2d[1][0] = array2;

我猜我无法使用引用进行复制,因为数组需要在连续内存中输入条目?是否有像我可以使用的功能的memset?

5 个答案:

答案 0 :(得分:3)

不可能。您需要逐个元素地从一个数组复制到另一个数组。

此外,您可以使用指向数组的指针数组来模仿二维数组。

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[2]; 

array2d[0] = array1;
array2d[1] = array2;

或者

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[] = {array1, array2}; 

cout << "[0][0]=" << array2d[0][0] << endl;
cout << "[1][0]=" << array2d[1][0] << endl;

OR REVERSE

如果你的目标是向某个API提供2d数组,那么你应该重构你的一面。例如,您可以使用指针模拟您的1d数组:

// an ampty array
int array2d[2][10];

// pointers to parts
int *array1 = array2d[0];
int *array2 = array2d[1];

int n;

// fill "arrays"
for(int i=0, n=1; i<10; ++i, ++n) {
    array1[i] = n;
}
for(int i=0, n=9; i<10; ++i, --n) {
    array2[i] = n;
}

// now you are ready
cout << "[0][0]=" << array2d[0][0] << endl;
cout << "[1][0]=" << array2d[1][0] << endl;

答案 1 :(得分:2)

如果你想要一个真正的2D数组(在内存中是连续的),你将不得不复制这些元素。但是,您可以使用2个指针数组来模拟它:

int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;

答案 2 :(得分:1)

这不是一个真正的2D数组,但你可以使array2d成为指向1d数组的指针数组:

int* array2d[2];

array2d[0] = array1;
array2d[1] = array2;

否则,您必须手动复制元素。

答案 3 :(得分:1)

你可以做一些事情。如果你知道你的数据在每个数组中都是恒定的,你可以#define它,然后在你的1D和2D数组中使用它。或者,您可以将1D数组中的元素存储到2D数组中。第二点如下所示:

#define ARRAY_1 { 1, 2, 3, 4, 5, 6 }
#define ARRAY_2 {7, 8, 9, 10, 11, 12 }

int array_1[] = ARRAY_1;
int array_2[] = ARRAY_2;

int two_dim_array[][] = {
    ARRAY_1,
    ARRAY_2,
}

答案 4 :(得分:1)

定义并指定

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;

<强>测试

printf("%d\t",array2d[0][0]);
printf("%d\t",array2d[0][9]);
printf("%d\t",array2d[1][5]);

它提供了1 10 4