1、当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。 2、当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的迭代器都会失效。 3、当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器...
说明:c.erase(it++) 会把it的旧值传给erase,但在erase开始执行之前it会自增,正好符合我们的期望。关联容器这样写没有任何问题,迭代器不会失效 SeqContainer<int> c; //顺序容器:vector list deque for(auto it=c.begin();it!=c.end();) { if(badValue(*it)) it=c.erase(it); //顺序容器的erase...
在这种情况下,所有指向该容器的迭代器都会失效。 三、迭代器失效的影响 迭代器失效可能导致程序出现未定义行为(Undefined Behavior),如访问无效的内存地址、读取错误的数据等。因此,在使用STL容器时,我们必须时刻注意迭代器的有效性。 四、避免迭代器失效的实践 使用erase-remove idiom删除元素:当我们需要删除容器中的某...