gpt4 book ai didi

c++ - 为什么我不能在 QMap.erase() 中使用 Java 风格的 QMapIterator?

转载 作者:行者123 更新时间:2023-11-30 02:15:23 24 4
gpt4 key购买 nike

我正在 Qt 5.12 中尝试这段代码:

//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::erase(QMapIterator&)' iteratorId2Pointer = mapId2Pointer_.erase(iteratorId2Pointer);

我看过很多例子,也用谷歌搜索过很多,但都没有成功。所有示例看起来都与上面的相似,每个示例都使用 QMapIterator 作为 QMap::erase() 调用中的参数。但是在我的代码中似乎无法从 QMapIterator 转换为 QMap::iterator。

这个错误的原因是什么?

最佳答案

QMapIterator 是“Java 风格的迭代器”,QMap::iterator 是“STL 风格的迭代器”。它们不兼容;你需要使用其中之一。

您可以像这样使用 QMap::iterator 进行迭代:

QMap<int, ZoneData*>::iterator i = mapId2Pointer_.begin();
while(i != mapId2Pointer_.end()) {
if (i.value() == _climbZoneData) {
i = mapId2Pointer_.erase(i);
} else {
++i;
}
}

请注意,如果您没有在中间删除内容(这会使您的迭代器无效,需要您将其设置为 erase 的返回值),则可以改用 for 循环。

关于c++ - 为什么我不能在 QMap.erase() 中使用 Java 风格的 QMapIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com