map类的erase方法的在Linux与Windows中的差异
来源:互联网 发布:收银找零算法 编辑:程序博客网 时间:2024/04/29 19:01
这次的代码是跨平台的,尼玛在win32上通过,但是在linux上不通过了,查找了一下原来是平台linux不支持。
有人举了例子:
std::map<
int
,
float
> i_f_map;
i_f_map[1] = 1.2f;
i_f_map[23] = 1.4f;
std::map<
int
,
float
>::iterator itr;
for
(itr = i_f_map.begin(); itr != i_f_map.end(); itr = i_f_map.erase(itr));
// win32可用,linux 不可用
for
(itr = i_f_map.begin(); itr != i_f_map.end(); i_f_map.erase(itr++));
// linux,win32可用
上边是很多人的做法,我也很赞同,但是为了代码的可读性,我一般会采取一下的措施,先用临时的一个 迭代器保存当前的迭代器,,并把当前的迭代器往后移。然后把这个临时的迭代器删除掉。这样下次循环就接着后移过的迭代器。
for
(itr = i_f_map.begin(); itr != i_f_map.end(); ){
if(itr->first == 12){
map<int,float>::iterator tempitr = itr++;
i_f_map.erase(tempitr);
}else{
itr++;
}
}
尤其是在嵌套容器中,容器里再嵌套容器,就很有可能出现itr是非法的,导致itr != i_f_map.end()条件不能被判断出来。
所以我建议大家使用下边的。
所以我建议大家使用下边的。
0 0
- map类的erase方法的在Linux与Windows中的差异
- Linux与Windows中map类erase方法的差异
- Linux与Windows中map类erase方法的差异
- Linux与Windows中map类erase方法的差异
- Linux与Windows中map类erase方法实现的不同决定使用的不同
- 关于map的erase方法的使用
- 正确运用stl map的erase方法
- 正确运用stl map的erase方法
- 正确运用stl map的erase方法
- 正确使用stl map的erase方法
- 正确使用stl map的erase方法
- 正确使用stl map的erase方法
- 正确使用stl map的erase方法
- 正确运用stl map的erase方法
- 正确使用stl map的erase方法
- 正确使用stl map的erase方法
- 正确使用stl map的erase方法
- 正确运用stl map的erase方法
- FFmpeg--About FFmpeg
- 我的博客开张了,欢迎常来
- yum源配置与使用
- 腾讯空间、新浪微博、腾讯微博分享接口
- SQL中获取排序分组后数据的脚本
- map类的erase方法的在Linux与Windows中的差异
- 自制家用空气净化器
- 百度2013年算法以及重大更新全部总结
- 关于SSL原理的说明理解
- FineUI v4.0.3 (beta) 和 FineUI v3.3.3 发布了!
- 盘点2013:最优秀的HTML5&CSS3设计【多图】(摘录)
- iOS7中容易被忽视的新特性
- WideCharToMultiByte和MultiByteToWideChar函数的用法
- c++ 多线程