迭代器失效很常见,无非是在迭代的上不要随意插入删除数据,然而,实际上迭代器失效反映的是一种现象,就是不要随意用容器的指针。
比如
std::vector<int> v{1,2,3};
int* ptr = &v[1];
这样使用有时候很常见,但是这是非常危险的行为。如果往v中加入元素,ptr就可能失效,产生段错误。
实际上,当用容器管理对象的时候
std::vector<obj> v;
千万不能随意将
&v[0]
这样的东西作为对象的指针随意传给别人,使用的时候需要考虑容器扩容带来的问题。
花了将近一天在多线程中遇到这种迭代器失效的问题。