簡體   English   中英

從1d數組創建2d數組

[英]creating 2d array from 1d arrays

如果我有幾個相同數據類型的數組,那么將它們全部復制到二維數組中的最佳方法是什么。 例如

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?

不可能。 您需要逐個元素地將元素從一個數組復制到另一個數組。

您還可以使用指向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;

或者反過來

如果你的目標是向某些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;

如果你想要一個真正的2D數組(在內存中是連續的),你將不得不復制這些元素。 但是,您可以使用2個指針數組來模擬它:

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

它不是一個真正的2D數組,但你可以使array2d成為一個指向1d數組的指針數組:

int* array2d[2];

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

否則,您必須手動復制元素。

你可以做一些事情。 如果您知道每個數組中的數據都是常量,則可以#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,
}

定義並分配

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM