直接删除肯定不行,不然我的程序也不会崩溃了。
首先尝试了下面的方法,很笨
IEnumCbCmdResponseFuncs::iterator itor;
for (itor=m_Funcs.begin();itor!=m_Funcs.end();itor++)
{
ResponseFunc pFunc = *itor;
if (!pFunc.enable)
{
m_Funcs.erase(itor);
itor=m_Funcs.begin();
if (itor==m_Funcs.end())
{
break;
}
continue;
}
}
然后知道了下面的方法
还有这个方法:IEnumCbCmdResponseFuncs::iterator itor; for (itor=m_Funcs.begin();itor!=m_Funcs.end();) { ResponseFunc pFunc = *itor; if (!pFunc.enable) { m_Funcs.erase(itor++); // 删除的是itor的复本(参考STL源码++的重载) continue; } ++itor; }
IEnumCbCmdResponseFuncs::iterator itor; for (itor=m_Funcs.begin();itor!=m_Funcs.end();) { ResponseFunc pFunc = *itor; if (!pFunc.enable) { itor = m_Funcs.erase(itor); // 删除的是itor的复本(参考STL源码++的重载) continue; } ++itor; }