您的位置:首页 > 编程语言 > C语言/C++

C++那些事儿

2016-05-13 11:12 369 查看

迭代器失效:

今天在写题时用到了容器的insert函数,在对其进行反复调用时出现了异常,调试时发现是在某次调用insert之后迭代器失效。网上查了一下相关资料(上课身边并没有书_(:зゝ∠)_),发现在容器的操作中:erase和insert函数都有可能导致后续迭代器失效,原因是:vector是一个顺序容器,在内存中是一块连续的内存,当删除一个元素后,内存中的数据会发生移动,以保证数据的紧凑。所以删除一个数据后,其他数据的地址发生了变化,之前获取的迭代器根据原有的信息就访问不到正确的数据。

解决办法:

erase和insert函数都会返回一个有效的迭代器(具体指向哪个元素尚且不清楚),所以正确的调用方法为:

itrt = vector.insert(itrt, val);


另外,貌似map的迭代器也有这个问题。

其他

set、map中如果存放的是结构体或者类,则需要在结构体或者类中重载<运算符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++