c++ - 从一维数组创建二维数组

标签 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;

我猜我不能使用引用进行复制,因为数组需要它的条目在连续的内存中?有没有我可以使用的类似函数的内存集?

最佳答案

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

您还可以使用指向整数数组的指针数组模拟二维数组。

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;

或反转

如果您的目标是将二维数组呈现给某些 API,那么您应该重构您的这一端。例如,您可以使用指针模拟一维数组:

// 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;

关于c++ - 从一维数组创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936040/

相关文章:

java - 如何在 jni 输入参数中返回 double[]

c++ - 为什么在按值返回时创建临时对象而不是在按值传递给函数参数时创建临时对象

c++ - 为不同返回类型的函数返回函数指针的函数

c++ - Vector:执行函数 vector ( const vector<T,Allocator>& x );只取数组存储位置的地址?

c++ - 如何使用 std::regex?

c - 如何在 header 中声明外部二维数组?

c - 如何使用指针返回二维数组函数?

c# - 将 C# 锯齿状数组转换为数组并再次返回

php - 将多维数组变成一维数组

javascript - 从 Canvas 标签内部分的颜色值返回多维 bool 数组?