我正在查看Cinder Box2D模板中的代码,并想修改代码,以便可以将框删除到屏幕上并添加它们。我是C++的新手,但根据我从其他SO帖子中学到的信息,我尝试使用if情况从 vector 中删除框:

for( vector<b2Body*>::iterator boxIt = mBoxes.begin(); boxIt != mBoxes.end(); ++boxIt ) {
    if( (*boxIt)->GetPosition().x > scaledX){
        boxIt = mBoxes.erase(boxIt);
    }
    else {

        Vec2f pos( (*boxIt)->GetPosition().x, (*boxIt)->GetPosition().y );
        float t = toDegrees( (*boxIt)->GetAngle() );

        glPushMatrix();
        gl::translate( pos );
        gl::rotate( t );

        Rectf rect( -BOX_SIZE, -BOX_SIZE, BOX_SIZE, BOX_SIZE );
        gl::drawSolidRect( rect );

        glPopMatrix();
    }

}

但这在第二次执行“(* boxIt)-> GetPosition()。x”时导致严重的访问崩溃。有任何想法吗?

最佳答案

删除后,请勿使用++boxIt。分配已将您的迭代器移至下一项。

从for行中删除++boxIt并将其仅放入else中。

关于c++ - 从指针 vector 中删除c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17478994/

10-11 19:25