0
我試圖刪除映射中的所有條目,其中value == 50的任意鍵。刪除STL地圖中的所有條目相匹配值
此代碼爲我工作的罰款。
while (itr != mymap.end())
{
if ((*itr).second == 50)
mymap.erase(itr++);
else
itr++;
}
但是這段代碼給出了運行時錯誤。
while (itr != mymap.end())
{
if ((*itr).second == 50)
{
mymap.erase(itr);
itr++
}
else
itr++;
}
我懷疑是不是兩個邏輯都是一樣的?爲什麼在第二種情況下運行時錯誤?
在第二種情況下,你要增加一個無效的迭代器(因爲你剛刪除它指向的項目)。考慮使用[erase/remove idiom](http://stackoverflow.com/questions/1038708/erase-remove-contents-from-the-map-or-any-other-stl-container-while-iterating) – Borgleader
什麼是在第一種情況下發生?同樣,刪除和增加?對? –
沒有,增量首先發生,但它++返回原始值(不像++),這樣您刪除正確的項目,但迭代器已經指向下一個。 – Borgleader