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

ボードと _3eat2 およびその他の識別子について心配する必要はありません。それは間違いなく問題ではないからです。
知っておく必要があるのは、ボードが 2 次元配列であることだけです。

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

(それ)は2次元配列のインデックスであると思われますが、代わりにエラーが発生します。イテレータを使用しようとすると、他のすべての場所で他のエラーが発生します。
このコードの何が問題なのか教えてください。

4

3 に答える 3

6

it + 1のみ有効ですRandomAccessIteratorslist提供しませんRandomAccessIteratorsが、BidirectionalIterators. イテレータ ライブラリの概要については、こちらを参照してください。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 に答える