Qt问题记录002:QMap的erase陷阱,正常运行与调试模式结果不同
Qt的QMap循环删除元素erase在运行时正常在调试模式下报错提供解决代码。关键词QMap、erase、迭代器、遍历与删除问题描述在使用 Qt 的QMap容器时尝试在遍历过程中删除元素在循环中调用erase()方法虽然程序在正常运行时可能不会立即出现异常但在调试模式下可能会遇到错误或未定义行为。Qt版本5.14.2代码如下点击折叠或展开代码void test_map_erase(){QMapint, int map;// 插入10条数据for (int i 0; i 10; i) {map.insert(i, i);}// 移除奇数for(auto itmap.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))调试模式运行报错如图修改后代码为避免运行和调试不一致统一改为如下代码点击折叠或展开代码void test_map_erase(){QMapint, int map;// 插入10条数据for (int i 0; i 10; i) {map.insert(i, i);}// 移除奇数for(auto itmap.begin();it!map.end();){if((it.key() % 2) 1) {it map.erase(it);} else {it;}}qDebug() map;}注意for循环去掉itfor(auto itmap.begin();it!map.end(); )