迭代器失效:
今天在写题时用到了容器的insert函数,在对其进行反复调用时出现了异常,调试时发现是在某次调用insert之后迭代器失效。网上查了一下相关资料(上课身边并没有书_(:зゝ∠)_),发现在容器的操作中:erase和insert函数都有可能导致后续迭代器失效,原因是:vector是一个顺序容器,在内存中是一块连续的内存,当删除一个元素后,内存中的数据会发生移动,以保证数据的紧凑。所以删除一个数据后,其他数据的地址发生了变化,之前获取的迭代器根据原有的信息就访问不到正确的数据。
解决办法:
erase和insert函数都会返回一个有效的迭代器(具体指向哪个元素尚且不清楚),所以正确的调用方法为:
itrt = vector.insert(itrt, val);
另外,貌似map的迭代器也有这个问题。
其他
- set、map中如果存放的是结构体或者类,则需要在结构体或者类中重载<运算符