にインクリメントこの方法は、アボート・エラーを引き起こす:起因と"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: 'value_type'はコピー不可能なので、' std :: map'には適用されません。 – ybungalobill
@ybungalobill足の中の私の穴を治すつもりです... – jrok
以上は基本的にマップの要素がシーケンスを構成しないためです。 –