1

好的,所以我在包含迭代器的代码中有错误。
这是我的代码的错误部分:

for(list<char>::iterator it = eatUpRight.begin();it!= eatUpRight.end();it+=2)
{
    board[*it][*(it+1)]=3;
    _3eat2(*it,*(it+1),eatOptions,newCurrentEatingOption);
    board[*it][*(it+1)]=0;
}

不要担心 board 和 _3eat2 以及任何其他标识符,因为这绝对不是问题。
所有你需要知道的是板是一个二维数组。

board[*it][*(it+1)]

(it) 应该是二维数组的索引,但它给了我错误。并在我尝试使用迭代器的其他地方给我其他错误。
所以你能告诉我这段代码有什么问题吗?

4

3 回答 3

6

it + 1仅对 有效RandomAccessIteratorslist不提供RandomAccessIterators,但提供双向迭代器。在此处查看迭代器库的概述。使用std::advance来抽象出这些操作的差异。

于 2012-07-23T16:43:58.410 回答
1
std::list<T>::iterator 

是一个bidirectional iterator。它没有operator +(std::ptrdiff_t);使用std::advance而不是operator +

于 2012-07-23T16:44:39.780 回答
0

补充说明:it不是索引而是迭代器。还有其他一些事情,这意味着您不能在与提供给您的集合不同的集合上使用它。

您从 . 接收eatUpRight并使用它(作为索引!)board

于 2012-07-23T18:00:09.303 回答