关键词:
QMap、erase、迭代器、遍历与删除
问题描述:
在使用 Qt 的 QMap
容器时,尝试在遍历过程中删除元素,在循环中调用 erase()
方法,虽然程序在正常运行时可能不会立即出现异常,但在调试模式下,可能会遇到错误或未定义行为。
Qt版本:5.14.2
代码如下:
void test_map_erase()
{
QMap<int, int> map;
// 插入10条数据
for (int i = 0; i < 10; ++i) {
map.insert(i, i);
}
// 移除奇数
for(auto it=map.begin();it!=map.end();++it)
{
if((it.key() % 2) == 1) {
map.erase(it);
}
}
qDebug() << map;
}
运行结果:
运行输出:
QMap((0, 0)(2, 2)(4, 4)(6, 6)(8, 8))
debug运行报错,如图:
修改后代码:
为避免运行和调试不一致,统一改为如下代码:
void test_map_erase()
{
QMap<int, int> map;
// 插入10条数据
for (int i = 0; i < 10; ++i) {
map.insert(i, i);
}
// 移除奇数
for(auto it=map.begin();it!=map.end();)
{
if((it.key() % 2) == 1) {
it = map.erase(it);
} else {
++it;
}
}
qDebug() << map;
}
注意:
- for循环去掉++it:
for(auto it=map.begin();it!=map.end(); )
- 满足情况移除时:
it = map.erase(it);
- 其他情况不移除时:
++it;
参考文献:
- Qt::QMap在for循环中使用erase的用法注意
- QMap 的增删改查
来源链接:https://www.cnblogs.com/wsry/p/18983862
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容