在做无向网时,我创建了一个二维vector对象,保存的是边的信息,现在要删掉第3个顶点,所以这个边的二维数组的第三行和第二列都要被删除,我使用了erase但是在运行时出错了,以下是我的代码,请问要如何更改 edges.erase(edges.begin()+i); //删除第i行 edges[j].erase(edges[j].begin()+i); } |
|
3分 |
参考这个删除
for(vector<int>::iterator it=arr.begin(); it!=arr.end(); ) |
2分 |
注意删除的时候容易导致迭代器失效。
|
删除后,迭代器失效,需重新获取
|
|
可以不用:iterator it=arr.begin()这种么,我看了一些博客关于erase的讲解,然后自己理解的是erase调用之后会自动++什么的,我不太懂iterator是什么东西 |
|
如何重新获取迭代器?我没有使用iterator,而是直接用的erase |
|
15分 |
删除后会自动前移
|
begin()返回的就是迭代器。你最好系统的看一下这方面的东西,不用很久,事半功倍 |
|
一楼二楼都说的比较好了,推荐一个effective stl 这个书不错
|
|
嗯嗯。解决了。就是没有考虑到自动前移导致size()减少,for循环的时候就出错了。谢谢 |
|
好的,谢谢 |