用于碰撞检测的C++双迭代器循环

jac*_*bot 2 c++ iterator collision-detection

首先,我是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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该说明我正在尝试的方法,但当然我的尝试mBoxes.begin() + p不起作用!

Rob*_*obᵩ 5

编辑:回复多条评论.

for (list<Box>::iterator p = mBoxes.begin(); p != mBoxes.end(); ++p) {
    for (list<Box>::iterator q = p); q != mBoxes.end(); ++q) {
        if (p==q) continue;
        if (p->isIntersecting(*q)) {
            p->changeDirection();
            q->changeDirection();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)