我有一个地图
for (auto it = myMap.begin(); it != myMap.end();it++)//myMap is a class variable {
keys.push_back(it->first);
values.push_back(it->second);
if (keys.size() != BATCH_SIZE)
continue;
vector<string> response = BatchGetResponse(keys);
it = ParseResponse(keys, values, response);
}
std::map<string, string>::iterator ParseResponse(vector<string>& keys,vector<string>& values, vector<string>& reponse)
{
auto it = myMap.begin();
for (int i = 0; i < int(values.size()); i++) {
if (response[i] == "")
continue;
it = myMap.erase(myMap.find(keys[i]));
updateMap(objectGuidsOfPaths[i], response[i]);
}
keys.clear();
values.clear();
return it;
}
这是执行此操作的正确方法吗,我不确定如果我没有获得 20 个元素中的任何一个的成功响应,因为迭代器将指向 myMap.begin()
我不确定你在做什么和问exacly.
像这样调用
map::erase
返回被删除元素之后的迭代器。
因此,如果你删除最后一个元素,你可能会返回
myMap.end()
然后你的第一个 for 循环将首先递增迭代器,然后再测试它是否是myMap.end()
。这是未定义的行为。