0

C ++のチェッカーで重複した動きをチェックするアルゴリズムを書いていますが、iterator.

これが私のコードです:

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。例やアドバイスを教えてください。

4

2 に答える 2

3

it->[i][j]使用する代わりに(*it)[i][j]。この->表記はメンバーにアクセスする場合にのみ使用されますが、リストにはクラスや構造体ではなく配列が含まれます。

于 2012-07-27T02:40:29.370 に答える
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
            }
        }
    }
于 2012-07-27T03:00:47.623 に答える