C++ 从指针 vector 中删除

标签 c++ pointers vector iterator

我正在查看 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 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17478994/

相关文章:

c++ - while循环C++中的多个条件

c++ - 在 while 循环中滥用 cin 进行 int 赋值

c++ - #pragma Once 不会阻止多个变量定义

C++:如何防止模板专门化指针?

c -++ 指针运算符

c++ - 在 C++ 中通过初始化数组初始化 vector 时出现段错误

c++ - 从文件中读取数据对

c++ - 当您不取消引用时,指针不只是一个引用吗?

c - 指针未设置为结构数组的元素

arrays - 使用 Octave 计算数组中每个唯一向量的实例数的最有效方法是什么?