产品代码在map中循环删除元素通常有两种方法:
举例:
- iterator自加
std::map<unsigned int, CFsMP4HeadFile*>::iterator buffer_ite = buffer_file_heads_mgmt_.begin(); for ( ; buffer_ite != buffer_file_heads_mgmt_.end(); ) { delete buffer_ite->second; buffer_ite->second = NULL; buffer_file_heads_mgmt_.erase(buffer_ite++); }
- 获取下一个元素
std::map<unsigned int, CFsMP4HeadFile*>::iterator buffer_ite = buffer_file_heads_mgmt_.begin(); for ( ; buffer_ite != buffer_file_heads_mgmt_.end(); ) { delete buffer_ite->second; buffer_ite->second = NULL; buffer_ite = buffer_file_heads_mgmt_.erase(buffer_ite); }
以上两种方法在windows下都没有问题,但在linux下第二种方法无法使用;
不管在linux还是Windows平台下,vector,list都有方法iterator erase( iterator _Where ),但是在Linux下map中没有方法iterator erase( iterator _Where );
返回iterator的erase貌似是不符合STL标准的:http://www.cplusplus.com/reference/map/map/erase/ 其中并没有提供上述版本的erase()
参考:http://www.cppblog.com/bujiwu/archive/2009/11/01/99928.aspx?opt=admin