当我尝试使用类元素的stl向量的擦除函数时,为什么会出现运行时错误?

时间:2015-06-07 14:27:24

标签: c++ class vector runtime-error erase

我有一个班级玩家:

class Player
{
    public:
        int pos,money;
        float x,z,y;
        string name;
        Model pion,banner;
}

和类Model

class Model
{
    public:
        vector<coordinate>vertex;
        vector<uv>textureCoordinates;
        vector<coordinate>normals;
        vector<face>faces;
        vector<material>materials;
}

struct坐标,uv,face和material只有float和int变量,所以不用担心。 我也有一个

vector<Player>player;

在我的程序的某个时刻,我尝试

int currentPlayer=something;
player.erase(player.begin()+currentPlayer);

当我这样做时,我的程序停止并给我一个错误:

Proces returned -1073741819 <0x0000005>

我做错了什么?我应该如何建立我的析构函数?

2 个答案:

答案 0 :(得分:0)

您可以使用std :: advance(iterator,n)将迭代器推进到n位置并将其擦除。

答案 1 :(得分:0)

我解决了我的问题。看起来当我只有一名玩家离开时我的代码不再工作了,因为在我的代码中的某处我做了

currentPlayer++;
currentPlayer%=player.size();

并且因为player.size()等于1导致我的问题失败了。无论如何都要求帮助。