QT QList迭代器失效问题 在使用QT迭代器的时候,发现迭代器的终止行为与预期不符,代码如下 int main(int argc, char* argv[]) { QList<int> ranges = {2, 3, 4, 5}; QList<int> temp = ranges; auto it1 = temp.cbegin(); auto it = temp.begin(); int count = 0; while ((it1 + 1) ...
list<T>::iterator first=l.begin(); list<T>::iterator last=l.end();for(;first!=last;) {if(*first==val) {//删除元素以后要给first迭代器重新赋值,之前first指向的地址已经失效first=l.erase(first);//erase会返回first下一个元素的地址cout<<"删除元素:"<<val<<endl; }else{ cout<<*first<<...
基于list循环删除元素,迭代器失效的问题详解 问题的关键是:在删除元素之前,将当前迭代器保存下来。当然,这里仅支持list,因为list的链式的删除一个元素,前面的指针指向下一个元素,vector和queue就不好办了,它们或者是线性的或者是半线性半链式,迭代器会失效 #include<iostream> #include<list> using namespace std; ...
而对于insert操作,其前面的迭代器和引用不会失效,而其后的迭代器都会失效(包括尾后迭代器). 2.vector的erase操作: 非法化位于擦除点或之后的迭代器,包含end()迭代器。 假如擦除位置是p,则擦除后p指向了它原先对应元素的后一个元素,如果p是最后一个元素,则擦除后指向了end. 3.vector的迭代器非法化 4.list...