Qt中的STL迭代器
STL iterator in Qt
我想遍历一个列表并删除大于30 的元素
QList<double> mylist;
QList<double>::iterator myiterator = mylist.begin();
mylist.append(6);
mylist.append(36);
myiterator=mylist.begin();
while(myiterator!=mylist.end())
{
if(*(myiterator)>30)
{
QList<double>::iterator next=myiterator;
next++;
mylist.erase(myiterator);
myiterator=next;
}
else
myiterator++;
if(myiterator==mylist.end())
std::cout<<"end of list "<<std::endl;
else
std::cout<<" not end of list "<<std::endl;
}
输出为
not end of list
not end of list
The program has unexpectedly finished.
/home/maverik/Desktop/Qt/container_class/container_class exited with code 0
其中,如果我使mylist={36,34}或mylist={36,9}或mylist={9,10},则输出为
not end of list
end of list
只有当最后一个元素大于30时,或者如果大于30,但第一个元素也大于30 时,才会出现错误
与C++标准容器一样,erase
在删除的元素之后返回一个迭代器,因此循环的一部分应该非常简单:
if((*myiterator)>30)
myiterator = mylist.erase( myiterator );
else
myiterator++;
删除元素时,迭代器前进了两次,修复方法如下:
QList<double>::iterator next=myiterator;
myiterator++;
mylist.erase(next);
当*myiterator > 30
EDIT:实际上,QList::erase将迭代器返回到下一个元素。因此,这个代码应该做到:
myiterator = mylist.erase(myiterator);
相关文章:
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 没有 STL 容器的迭代器
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 迭代器 STL C++是模板、类还是接口?
- 为什么我们不在 STL 的迭代器中传递星号(*)
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- 迭代器和 STL 容器的关系
- C++ 中 STL 中迭代器的大小(以字节为单位)是多少
- 如何将 stl 迭代器与特征一起使用?
- 用于 STL 迭代器、指针和 std::nullptr_t 的模板函数
- 在 stl 容器包装器中定义迭代器类型
- 在多个 STL 对对象上创建迭代器
- 如何为获取 stl 容器迭代器的函数提供函数签名?
- 在 stl 算法中移动迭代器
- lower_bound 在 C++ STL 中返回迭代器,即使元素不存在也是如此.如何避免这种情况?
- 并行STL插入迭代器,例如std :: back_insert_iterator
- STL 迭代器继承:"value_type"不命名类型