第一次应用erase()后向量中的最后一个对象消失

时间:2018-03-18 14:25:36

标签: c++ stdvector

我有一个非常奇怪的问题,如果我要说的话听起来很傻,我会提前道歉。

我正在开发一款简单的3D游戏,我在MacBook Pro上使用c ++,OpenGL 4.1和Xcode 9.2。我是初学者,我正在与对象的向量斗争。特别是,我设法创建了一个给定对象的几个实例,并在我的场景中显示它们。我现在正试图一次处理一个对象的删除,首先是为了简单起见。因此,我只是将erase()函数应用于向量,但是,即使实际上只删除了向量中的第一个元素,最后一个元素也会从场景中消失。 我检查了迭代器正在正确扫描更新的列表(尽管没有必要,因为删除是在for循环之外)。我还暂停了程序并查看了内存以查看最后一个对象是否仍然存在,而且确实存在。我认为最后一个对象只是与另一个对象重叠,但并不是因为它的模型转换矩阵与其他对象不同。 作为最后一次测试(我现在绝望了),我已经编写了一部分代码,在重复使用erase()之后没有留下任何元素时重新push_back()s。问题依然存在。 我能做错什么? 这是代码的一部分(想象一下,向量“blocks”在开头已有6个元素):

if (fire){ // mouse button pressed
    fire = false;
    num_of_blocks--;
    blocks.erase(blocks.begin()); //delete first element, but last disappears!!
    if (num_of_blocks==0){
        first = true;
        num_of_blocks = 6;
    }

}
if (first){
    first = false;
    Vector3f pos = Vector3f(0,1,-3);
    for (int i=0; i<num_of_blocks;i++){
        pos.z() -= 2;
        Parallelepiped newBlock = Parallelepiped(_textureWall.GetID(),2.0f,0.5f,1.2f);
        blocks.push_back(newBlock);
        blocks[i].setPosition(pos);
    }
}
    for (vector<Parallelepiped>::iterator it = blocks.begin(); it !=blocks.end(); it++){
    drawObject(&shaders[0], &(*it));
}

提前谢谢你。

0 个答案:

没有答案