Перво-наперво, я очень новичок в C ++! Итак, у меня есть стандартный список объектов, представляющих элементы в двухмерном пространстве, и я хочу сделать базовое обнаружение столкновений. Моя первая идея (исходящая в основном из Java-фона ...) состоит в том, чтобы сравнивать каждый объект с каждым другим объектом, вызывая функцию для проверки пересечения каждой пары или объектов. В Java это было бы просто: взять первый элемент ArrayList, сравнить его со вторым, третьим и т. Д., Затем взять второй элемент, сравнить его с третьим, четвертым и т. Д. Это подход, который я использовал с проблема в C ++, но я использую итератор (а не прямой доступ к элементам, как я бы сделал в Java), но итераторы предназначены для линейного использования, верно? Так что прямой доступ не подходит.
Итак, мой вопрос, как мне выполнить этот алгоритм? Я также вполне уверен, что это не лучший способ (очень простой) обнаружения столкновений, поэтому любые советы по этому поводу также приветствуются. Вот мой (нерабочий) код.
for (list<Box>::iterator p = mBoxes.begin(); p != mBoxes.end(); p++) {
for (list<Box>::iterator q = mBoxes.begin() + p); q != mBoxes.end(); q++) {
if (p->isIntersecting(q)) {
p->changeDirection();
q->changeDirection();
}
}
}
Это должно проиллюстрировать метод, который я пытаюсь использовать, но, конечно, моя попытка mBoxes.begin() + p
не работает!