我正在编写一种算法,用于检查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
访问列表中的数组元素。有人可以帮我提供实例和/或建议吗?
答案 0 :(得分:3)
而不是it->[i][j]
使用(*it)[i][j]
。 ->
表示法仅在您访问成员时使用,但您的列表包含数组,而不是类或结构。
答案 1 :(得分: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
}
}
}