此方法会导致中止错误:"map/set iterator not incrementable."
由于在if
发生故障并且应该擦除的vaild迭代器被确定(和是)之后,经由++_iter
继续在地图中的下一个迭代器失败,因为_iter
不再是有效的对象/指针。C++:从地图擦除迭代器,然后递增到下一个迭代器
什么是通过地图迭代,并具有在整个删除个别项目的能力,正确的程序?
typedef std::map<std::string, BITMAP*> MapStrBmp;
typedef MapStrBmp::iterator MapStrBmpIter;
\\...
void BitmapCache::CleanCache() {
//Clean the cache of any NULL bitmaps that were deleted by caller.
for(MapStrBmpIter _iter = _cache.begin(); _iter != _cache.end(); ++_iter) {
if(_iter->second != NULL) {
if((_iter->second->w < 0 && _iter->second->h < 0) == false) continue;
}
_cache.erase(_iter);
}
}
@jrok:不适用于'std :: map',因为它的'value_type'是不可复制的。 – ybungalobill 2012-01-11 22:17:40
我@ybungalobill去医治我的脚现在孔... – jrok 2012-01-11 22:19:20
,更根本的,因为地图的元素,没有形成一个序列。 – 2012-01-11 22:20:06