2012-07-27 2 views
0

C++의 체커에서 중복 동작을 확인하는 알고리즘을 작성했지만 iterator을 사용하는 데 문제가 있습니다. 나는 특히이 라인에 도움이 필요C++에서 반복자를 사용하는 데 문제가 있음

static std::list<char[8][8]> duplicates; 

    char checkForDuplicates[8][8]; 
    for(char i = 0;i < 8;i++) 
     for(char j = 0;j < 8;j++) 
      checkForDuplicates[i][j] = board[i][j]; 
    bool isDuplicate = false; 
    for(std::list<char[8][8]>::iterator it = duplicates.begin(); it != duplicates.end(); it++) 
    { 
     for(char i = 0;i < 8;i++) 
     { 
      for(char j = 0;j < 8;j++) 
      { 
       if(checkForDuplicates[i][j] != it->[i][j]) 
        //do something 
      } 
     } 
    } 

: 여기

내 코드입니다

if(checkForDuplicates[i][j] != it->[i][j]) 

내가 다른 배열 요소 목록에서 배열 요소를 비교하려고하지만 난 더이 list iterator을 사용하여 목록 안의 배열 요소에 액세스하는 방법. 아무도 제게 도움이 될 수 있습니까?

+0

나는 배열 유형은 STL 컨테이너 유형을 저장하는 두 가지 요구 사항이 필요, 작도 또는 양도를 복사하지 않기 때문에 당신이하는'표준 : list' 내부 배열을 저장할 수 있다고 생각하지 않습니다. 아마도 그들은 C++ 11에서 이것을 완화했습니다. – templatetypedef

답변

3

it->[i][j] 대신 (*it)[i][j]을 사용하십시오. -> 표기법은 멤버에 액세스 할 때만 사용되지만 목록에는 클래스 나 구조체가 아닌 배열이 포함됩니다.

1

반복기에서 개체에 대한 참조를 만드는 경우 이해가 쉽지 않을 수 있습니다. 그 후에는 평소와 같이 액세스 할 수 있습니다.

static std::list<char[8][8]> duplicates; 

    char checkForDuplicates[8][8]; 
    for(char i = 0;i < 8;i++) 
     for(char j = 0;j < 8;j++) 
      checkForDuplicates[i][j] = board[i][j]; 
    bool isDuplicate = false; 
    for(std::list<char[8][8]>::iterator it = duplicates.begin(); it != duplicates.end(); it++) 
    { 
     char (&thisBoard)[8][8] = *it; # <-- 
     for(char i = 0;i < 8;i++) 
     { 
      for(char j = 0;j < 8;j++) 
      { 
       if(checkForDuplicates[i][j] != thisBoard[i][j]) 
        //do something 
      } 
     } 
    } 
관련 문제