擦除矢量元素崩溃程序

Chr*_*_vr 0 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);          
    }
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*one 6

你必须删除++itrUIConfor指令.

UIConnection::iterator itrUICon;

for ( itrUICon = m_ListUIConnection.begin();itrUICon != m_ListUIConnection.end(); )
{
    if (*itrUICon == nSock)
    {           
        itrUICon = m_ListUIConnection.erase(itrUICon);          
    }
    else ++itrUICon;
}
Run Code Online (Sandbox Code Playgroud)

  • 来自链接的@Martin:"返回值:一个随机访问迭代器,指向函数调用擦除的最后一个元素后面元素的新位置,如果操作擦除了序列中的最后一个元素,则为向量结束." . (3认同)