vector erase问题

C++语言 码拜 6年前 (2015-05-11) 540次浏览 0个评论

在做无向网时,我创建了一个二维vector对象,保存的是边的信息,现在要删掉第3个顶点,所以这个边的二维数组的第三行和第二列都要被删除,我使用了erase但是在运行时出错了,以下是我的代码,请问要如何更改
//=====================================删除一个顶点=====================================
template<class T>
void MGraph<T>::RemoveVex(T v)
{
int i=GetVexValueNum(v);                                       //获得该顶点的序号

edges.erase(edges.begin()+i);                             //删除第i行
for(int j=0;j<vexnum;j++)                                         //删除每行的第i个元素
{
if(j!=i)                                                                 //因为前面已经将第i行第i列的元素删除了,所以我在这里有一个判断
{

edges[j].erase(edges[j].begin()+i);

}
}
vexnum–;
}
数组有9行9列,运行到edges[8].erase(edges[8].begin()+i)报错:access violation  
不知道到底哪里错了,求大神帮助

3分
参考这个删除 

for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
    {
        if(* it == 8)
        {
            it = arr.erase(it);
        }
        else
        {
            ++it;
        }
    }

2分
注意删除的时候容易导致迭代器失效。
删除后,迭代器失效,需重新获取
引用 1 楼 focuslight 的回复:

参考这个删除 

for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
    {
        if(* it == 8)
        {
            it = arr.erase(it);
        }
        else
        {
            ++it;
        }
    }

可以不用:iterator it=arr.begin()这种么,我看了一些博客关于erase的讲解,然后自己理解的是erase调用之后会自动++什么的,我不太懂iterator是什么东西

引用 2 楼 FightForProgrammer 的回复:

注意删除的时候容易导致迭代器失效。

我其实不太了解vector的迭代器,我想问下比如我要删除vector中间的一个元素,删除之后后面的元素会不会自动前移,还有就是erase之后有没有什么返回值之类的,比如类似返回下一个指针

引用 3 楼 zhangxiangDavaid 的回复:

删除后,迭代器失效,需重新获取

如何重新获取迭代器?我没有使用iterator,而是直接用的erase

15分
删除后会自动前移
引用 5 楼 u014050788 的回复:
Quote: 引用 2 楼 FightForProgrammer 的回复:

注意删除的时候容易导致迭代器失效。

我其实不太了解vector的迭代器,我想问下比如我要删除vector中间的一个元素,删除之后后面的元素会不会自动前移,还有就是erase之后有没有什么返回值之类的,比如类似返回下一个指针

begin()返回的就是迭代器。你最好系统的看一下这方面的东西,不用很久,事半功倍

一楼二楼都说的比较好了,推荐一个effective stl 这个书不错
引用 7 楼 fly_dragon_fly 的回复:

删除后会自动前移

嗯嗯。解决了。就是没有考虑到自动前移导致size()减少,for循环的时候就出错了。谢谢

引用 9 楼 wangyaninglm 的回复:

一楼二楼都说的比较好了,推荐一个effective stl 这个书不错

好的,谢谢


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明vector erase问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!