本文主要是介绍在QList遍历中出现的错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
QList迭代器中remove()易错点
下面展示 代码片段
。
//遍历时需要先释放指定类型的元素, 将元素从容器中删除后再释放其余元素
//使用Java风格迭代器遍历QList容器
QList<QGraphicsItem *> items;
QMutableListIterator<QGraphicsItem *> i(items);
while (i.hasNext()) {Link *link = dynamic_cast<Link *>(i.next());if (link) {delete link; i.remove(); //易错点, 这里的remove不是删除当前项, 而是迭代器之前指向的最后一项;//错误的删除了不应删除的元素}}qDeleteAll(items);
void QMutableListIterator::remove()官方文档说明: 删除使用遍历函数之一跳过的最后一项。
下面展示正确做法
。
// 不使用迭代器遍历
for(int i = 0; i < items.size(); ++i){Link *link = dynamic_cast<Link* >(items[i]);if (link){delete link;items[i] = NULL;items.removeAt(i); //这样就正确删除了当前项;}
}
关于其中的 qDeleteAll( container )
在这里稍作讲解。
qDeleteAll( container )在这里的是用delete操作符释放容器中的所有元素
等同于下面所示代码:
for(int i = 0; i < items.size(); ++i){if(items[i]){delete items[i];}
}
这篇关于在QList遍历中出现的错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!