0

私はそのようなコードを持っています:

QVector<Point> legalMoves = field.getLegalMoves();
QVector<Cell> costs;
costs.reserve(legalMoves.size());
for (QVector<Point>::iterator i = legalMoves.begin(); i < legalMoves.end(); ++i)
    costs.push_back(checkCost(field, *i, player, -100, 100));
Cell cost;
if (player)  {
    QVector<Point>::iterator m1 = legalMoves.begin();
    QVector<Cell>::iterator m2 = costs.begin();
    QVector<Cell>::iterator j = costs.begin() + 1;
    for (QVector<Point>::iterator i = legalMoves.begin() + 1; i < legalMoves.end(); ++i, ++j)
        if (j->status > m2->status) {
            m1 = i;
            m2 = j;
        }
    cost=*m2;
}
else  {
    QVector<Point>::iterator m1 = legalMoves.begin();
    QVector<Cell>::iterator m2 = costs.begin();
    QVector<Cell>::iterator j = costs.begin() + 1;
    for (QVector<Point>::iterator i = legalMoves.begin() + 1; i < legalMoves.end(); ++i, ++j)
        if (j->status < m2->status) {
            m1 = i;
            m2 = j;
        }
    cost=*m2;
}
QVector<Point> moves;
QVector<Cell>::iterator j = costs.begin();
for (QVector<Point>::iterator i = legalMoves.begin(); i < legalMoves.end(); ++i, ++j)
    if (j->status == cost.status)
        moves.push_back(*i);
short index = qrand()%moves.size();
return moves[index];            

}

私がそれをデバッグしているとき、コンパイラはループ内のこの部分をスキップするだけです:

if (j->status < m2->status) {
                m1 = i;
                m2 = j;
            }

これは、関数が最初のポイント (または最小/最大ではなく同じセル値を持つ他のポイント) を返すことを意味します。なぜそれが起こり、どうすればそれを修正することができますか?

4

0 に答える 0