C++ 为什么我不能在QMap.erase()中使用Java风格的QMapIterator?
我正在Qt 5.12中尝试以下代码:C++ 为什么我不能在QMap.erase()中使用Java风格的QMapIterator?,c++,qt,qt5,C++,Qt,Qt5,我正在Qt 5.12中尝试以下代码: //Definition of map QMap<int, ZoneData*> mapId2Pointer_; //Some values filled in mapId2Pointer_ here... QMapIterator<int, ZoneData*> iteratorId2Pointer(mapId2Pointer_); while (iteratorId2Poin
//Definition of map
QMap<int, ZoneData*> mapId2Pointer_;
//Some values filled in mapId2Pointer_ here...
QMapIterator<int, ZoneData*> iteratorId2Pointer(mapId2Pointer_);
while (iteratorId2Pointer.hasNext())
{
iteratorId2Pointer.next();
if (iteratorId2Pointer.value() == _climbZoneData)
{
iteratorId2Pointer = mapId2Pointer_.erase(iteratorId2Pointer); //<- ERROR
}
}
//地图的定义
QMap-mapid2指针;
//此处mapId2Pointer\中填写的某些值。。。
QMapIterator迭代器2指针(MAPID2指针);
while(iteratorId2Pointer.hasNext())
{
iteratorId2Pointer.next();
if(iteratorId2Pointer.value()
{
iteratorId2Pointer=mapId2Pointer_u2;erase(iteratorId2Pointer);//QMapIterator
是一个“Java风格的迭代器”,而QMap::iterator
是一个“STL风格的迭代器”。它们不兼容;您需要使用其中之一
您可以像这样使用QMap::迭代器进行迭代:
QMap::迭代器i=mapId2Pointer.begin();
而(i!=mapId2Pointer_uz.end()){
如果(i.值()==\u爬升分区数据){
i=MAPID2指针。擦除(i);
}否则{
++一,;
}
}
注意,如果你没有删除中间的东西(它使你的迭代器无效,要求你将它设置为从代码中返回的值>擦除< /代码>),您可以使用for循环。
哦,天哪,您完全正确。我假设Java的迭代器可以与STL的迭代器互换。我没有注意到细微的差别。这就是为什么我不再寻找它们之间的一些(不存在的)类型转换。简单、清晰、简洁。谢谢!!