擦除矢量元素崩溃程序

时间:2011-05-16 06:43:22

标签: c++

为什么以下代码失败?

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);          
    }
}

2 个答案:

答案 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时才执行此操作。