2014-04-24 3 views
0

두 개의 구조체가 있습니다 : ARRAY2D (다차원) 및 ARRAY (1 차원). ARRAY2D 유형에서 열을 가져 와서 ARRAY 유형으로 복사하고 싶습니다.C의 다차원 배열에서 열을 가져 오는 효율적인 방법은 무엇입니까?

내 코드는 아래에서 작동하지만 배열에서 열을 가져 오는 것이 좋지 않을 수도 있지만 O (n2) 알고리즘을 피하기 위해 어떤 최적화가 필요한지 궁금합니다. C에서 배열의 열을 가져 오는 효율적인 방법은 무엇입니까?

BOOL arr2_getColumn(ARRAY2D *arr, const int column_index, ARRAY *returnedArray) 
{ 
    int x, y; 
    int i = 0; 

    /* Check for valid array. */ 
    if (arr->blnIsInit != TRUE) 
     return FALSE; 

    /* Initialize array with the column's height. */ 
    if (!arr_init(returnedArray, arr->height)) 
     return FALSE; 

    /* Copy over column. */ 
    for (y = 0; y < arr->height; y++) 
    { 
     for (x = 0; x <= column_index; x++) 
     { 
      if (x == column_index) 
      { 
       returnedArray->array[i] = arr->array[y * arr->width + x]; 
       i++; 
      } 
     } 
    } 

    /* Set the new size. */ 
    returnedArray->size = arr->height; 

    return TRUE; 
} 
+0

중복 가능성 (http://stackoverflow.com/questions/15258084/how-to-get-column-of-a-multidimensional [C/C++?의 다차원 어레이의 열받는 방법]를 -Array-in-cc) –

+0

아니, 아니 .... – Phil

+0

또한 ARRAY2d와 ARRAY가 무엇인지 알 수 없습니다. – Gandaro

답변

2

ix 제거하십시오.

for (y = 0; y < arr->height; y++) 
{ 
    returnedArray->array[y] = arr->array[y * arr->width + column_index]; 
} 
+0

훨씬 좋습니다. 도와 주셔서 감사합니다. – Phil

0

/* 열을 복사하십시오. */

for (y = 0; y < arr->height; y++) 
{ 
    x = column_index; 
    returnedArray->array[i] = arr->array[y * arr->width + x]; 
    i++; 
} 
관련 문제