返回信息流s.erase(p)表示删除迭代器P指向的元素,返回一个迭代器,指向被删除元素后面的元素。
不明白的是:vector容器在任何位置的插入和删除操作将指向该容器的所有迭代器都失效嘛。
感觉有点矛盾,或许是错过了什么,请高手指点,小白在此谢过
这是一条镜像帖。来源:北邮人论坛 / cpp / #72089同步于 2013/6/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
容器小问题
shakeup
2013/6/24镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
假设你删除之前有一个指向vector某个元素的迭代器。
操作vector之后,之前的迭代器失效。
但是操作之后返回的迭代器应该是新vector的一个有效的迭代器。
仅仅是字面理解,没有实际跑过,你可以随便写点测测~
对于vector来说,迭代器可以是一个指针。由于他是连续的存储空间。闪出一个元素之后要进行移动拷贝操作,至少删除元素后面的元素位置都会改变。所以指向他们的指针就无效了。
至于前面的元素位置变不变,要看内部实现。也许不会变
【 在 gaoweiwei 的大作中提到: 】
: 怎么会矛盾?删除一个元素,返回下一个元素,这是这样啊
我的意思是既然跌迭代器都失效了,怎么还指向删除元素的下一个元素呢?
【 在 gaoweiwei 的大作中提到: 】
: 怎么会矛盾?删除一个元素,返回下一个元素,这是这样啊
还是说以前的迭代器失效,新的迭代器指向新的容器中删除元素的下一个元素。我都弱爆了,呵呵