2012-07-27 40 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

我不認爲你可以存儲陣列中的'的std :: list'裏面,因爲數組類型沒有拷貝構造或轉讓的,兩個要求必須存儲在STL容器類型。不過,也許他們在C++ 11中放寬了這一點。 – templatetypedef 2012-07-27 02:40:41

回答

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 
      } 
     } 
    }