3

同じデータ型の配列が複数ある場合、それらすべてを2D配列にコピーするための最良の方法は何ですか。例えば

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;

配列は連続したメモリにエントリを必要とするため、参照を使用してコピーすることはできないと思いますか?使用できるfuncitonのようなmemsetはありますか?

4

5 に答える 5

3

不可能。ある配列から別の配列に要素ごとにコピーする必要があります。

また、intの配列へのポインターの配列を使用して2D配列を模倣することもできます。

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;

または逆

2D配列をAPIに提示することが目標である場合は、サイドをリファクタリングする必要があります。たとえば、ポインタを使用して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;
于 2012-12-18T15:26:13.863 に答える
2

実際の2D配列(メモリ内で連続)が必要な場合は、要素をコピーする必要があります。ただし、2つのポインターの配列を使用してエミュレートすることはできます。

int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;
于 2012-12-18T15:29:04.573 に答える
1

これは実際の2D配列ではありませんがarray2d、1D配列へのポインターの配列を作成できます。

int* array2d[2];

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

それ以外の場合は、要素を手動でコピーする必要があります。

于 2012-12-18T15:22:41.263 に答える
1

できることがいくつかあります。データが各配列内で一定になることがわかっている場合は、それを実行#defineして、1Dおよび2D配列で使用できます。または、1D配列から2D配列に要素をmemcpyすることもできます。2番目のポイントはここに示されています:

#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,
}
于 2012-12-18T15:29:00.993 に答える
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

于 2012-12-18T15:37:20.143 に答える