Driver::~Driver()
{
AutoCritSec acsDriverList(m_csDriverList,true);
DRIVERLIST::iterator it = m_DriverList.begin();
for(;it!=m_DriverList.end();it++)
{
if (it->second == this)
{
m_DriverList.erase(it);
it = m_DriverList.begin();
}
}
}
當我在visual studio 2003中編譯我的程序時,我的程序表現良好。但是當我在2010年做的一樣,然後同時關閉應用程序,我得到這樣map/set迭代器不可遞增map/set迭代器不可遞增
Expression:map/set iterator not incrementable
一些錯誤,當我按下忽略這一點,我得到
Expression:"standard c++ library out of range" && 0
是否有任何人有任何的想法是什麼在這裏:我會非常感激任何人的任何建議。噸的感謝和溫暖的祝福。
擦的好推薦/刪除。在這種特殊情況下,m_DriverList顯然是成對的容器,或者是某種類型的映射,因爲測試就在它上面 - >秒。而不是std :: remove,它需要std :: remove_if與lambda函數或比較函數。 –
如果容器是一個映射(問題標題,訪問成員'second'),那麼我不認爲可以應用* erase-remove *成語。慣用法與您所使用的while循環相似,但不是重新開始迭代,而是複製並推進迭代器,然後擦除當前位置。 –
@DavidRodríguez-dribeas @MarkTaylor:好的;我被變量名稱中的「List」分心了。在C++ 11中,'erase'將迭代器返回到下一個元素(或者如果沒有下一個元素,則返回到一個尾部),並且Visual C++ 2010支持這一點。 –