zoukankan      html  css  js  c++  java
  • C++遍历中删除std::hash_map元素问题

    问题:在遍历中删除std::hash_map元素时,出现服务器挂的情况。  

    改进前代码:    

    //释放指定会议的socket和客户信息
        it=m_ClientSocket.begin();
        for(;it!=m_ClientSocket.end();it++)
        {
            if (it->second.meetingid==loginuserinfo.meetingid)
            {
                SOCKET s=it->first;
                closesocket(s);
                cout<<"close socket is :"<<s<<endl;
                m_ClientSocket.erase(it);//问题就出现在这里不能返回下一个迭代器,因为已经删除it了,退出if后it就不知道从那里加起了
            }
       
        }
        return true;
    }

    解决方法:

         如改进代码:

           //释放指定会议的socket和客户信息
        it=m_ClientSocket.begin();
        for(;it!=m_ClientSocket.end();)
        {
            if (it->second.meetingid==loginuserinfo.meetingid)
            {
                SOCKET s=it->first;
                closesocket(s);
                cout<<"close socket is :"<<s<<endl;
                m_ClientSocket.erase(it++);//,因为这样的话就能保证在函数执行退出前使it在原来元素的位置的基础上指向下一个元素的位置,如退出后再加的话,原来的位置地址已经删除了,所以it就无从加起了
            }
            else
            {
               ++it;
            }
        }
        return true;
    }

  • 相关阅读:
    删除目录软链接注意事项
    使用Dnsmasq搭建本地dns服务器上网
    在CentOS 7 上安装广告服务器 Revive Adserver
    CentOS6 Squid代理服务器的安装与配置
    CentOS6 PXE+Kickstart无人值守安装
    Redis的初步安装
    创建交互式shell脚本对话框
    C 捕获 lua 异常错误
    iic 之24C256存储器 及PCF8563
    汉字的编码与字模点阵小结
  • 原文地址:https://www.cnblogs.com/toosuo/p/2484778.html
Copyright © 2011-2022 走看看