为什么以下代码失败?
typedef vector<SOCKET /*socket*/> UIConnection;
UIConnection::iterator itrUICon;
for ( itrUICon = m_ListUIConnection.begin();itrUICon != m_ListUIConnection.end();itrUICon++)
{
if (*itrUICon == nSock)
{
itrUICon = m_ListUIConnection.erase(itrUICon);
}
}
答案 0 :(得分:6)
您必须删除++itrUICon
指令中的for
。
UIConnection::iterator itrUICon;
for ( itrUICon = m_ListUIConnection.begin();itrUICon != m_ListUIConnection.end(); )
{
if (*itrUICon == nSock)
{
itrUICon = m_ListUIConnection.erase(itrUICon);
}
else ++itrUICon;
}
答案 1 :(得分:4)
可能是因为您正在删除向量中的最后一项,然后在itrUICon
语句的增量部分中增加for
,当它已经等于.end()
时。
首选使用erase()/std::remove()
惯用法,或者至少将增量移出for
语句,只有在您没有预先形成erase
时才执行此操作。