for (; frontIter < rearIter; frontIter++) { /* move along the games from first to last */
Вы правы: вы должны использовать !=
вместо <
. Это, вероятно, не имеет никакого значения, но в отсутствие причины поступить иначе, вы, как правило, также хотите использовать преинкремент, а не постинкремент, давая:
for (;frontIter != readiter; ++frontIter)
for (compIter = aMove.end(); compIter > frontIter; ) { /* move along the games from last to first */
Чтобы просмотреть коллекцию в обратном порядке, вы обычно хотите использовать reverse_iterator:
vector<game>::reverse_iterator compIter;
for (compIter=aMove.rbegin(); compIter != frontIter; ++compIter);
Впрочем, я не помню, можете ли вы напрямую сравнить итератор с reverse_iterator - вам, вероятно, нужно преобразовать fronIter в reverse_iterator, чтобы сделать сравнение.
/* checkForSymmetry compares *frontIter to all symmetries of *compIter */
if (checkForSymmetry(*frontIter, *compIter)) {
compIter--;
aMove.erase(compIter + 1);
}
else {
compIter--;
}
} /* reset iterators for next loop */
Хотя преобразование не будет полностью простым, похоже, что это в конечном итоге представляет собой вариант std::remove_if
, поэтому вы можете изменить его для использования стандартного алгоритма.