没有傲慢也没有偏见

原创 2013年12月04日 22:22:08
     
    最近在跨平台编译项目的时候,遇到一个很有意思的问题,关于std::map.erase() 返回参数不一样,跨平台编译失败的问题。由于涉及到不同平台,不同标准的问题。可能很多不成熟的人又该喷微软不遵循标准,自做主张了,下面这篇文章就是为微软申冤的。

两个平台的标准:
查看c++文档发现删除迭代器函数
c++98 标准 erase返回void
c++11 标准 erase返回iterator
再看微软的文档:
http://msdn.microsoft.com/en-us/library/z2f3cb7h.aspx
和c++11 的标准是一样的

编译不过的示例代码:
std::map<int, string> player_map;
std::map<int, string>::iterator it = player_map.begin();
for(; it != player_map.end(); ){
    int id = it->first;
    if(id = 10001) {
         it = player_map.erase(it);
    }else{
         ++it;
    }
}
     在vs2008里编译没任何问题,到gcc里报没有=操作符。标准库循环内删除的代码:
std::map<int, string> player_map;
std::map<int, string>::iterator it = player_map.begin();
std::map<int, string>::iterator delIt = null;
for(; it != player_map.end();){
    delIt = it;
    ++it;
    int id = delIt->first;
    if(id = 10001) {
         player_map.erase(delIt);
    }
}

对标准库的评价:
     如果没有返回值,就需要提前将it复制出来,下面的代码明显没有上面的优美,所以微软的erase返回iter是对的。并且有下面优势:
  1. 保持了和其他stl  erase方法的一致性,不许要在多记一条特殊的方法
  2. 程序看起来更加优美,简洁
  3. 方便循环内删除
注意:
    循环内删除的时候,保证只做一件事情,这段代码的内聚性更高,同时如果在循环内删除的时候迭代器的递增会使得it == it.end(), 这时候引用了it,会导致程序发生不可预料的结果。

总结:
    通过上面的二段代码,发现返回下一个迭代器更加合理,因为在循环内删除,需要指向下次迭代器的值。从这些历史的变迁里,微软让我更加敬佩,他们没有盲目的去崇拜或者遵循权威,而是通过自己对技术的理解,修正了标准库的不足。而同样标准库也是知错能改,并没有因为自己的错误,或者自己订立标准库的便利,而固执不变。这正是我们做技术的应给学习的地方:不盲目权威,知错就改。

相关文章推荐

王垠:知识分子的傲慢与偏见

经历了这么多的事情,见过了这么多不同种类的人,我一直在想,知识分子心里存在的傲慢与偏见是从哪里来,到哪里去的。现在我也许找到了一些线索。   傲慢   先说说傲慢产生和消亡的规律吧。   1. ...

姜奇平:电信的傲慢与偏见

近日,发改委价格司公布对中国电信、中国联通价格歧视的反垄断调查。这是我国对大型国有企业展开的第一次反垄断调查,具有历史意义。    反垄断调查消息的公布,引起电信业的激烈反应。有些反应在我看来甚...
  • IEEEITU
  • IEEEITU
  • 2011年12月17日 22:45
  • 2245

傲慢与偏见。你所不知道的select()——The C10M Problem

傲慢与偏见。你所不知道的select()。人们对select() 的认识。Linux对传统select()的限制的突破简史。...
  • tlthm
  • tlthm
  • 2016年07月06日 01:43
  • 165

企业运营对 DevOps 的「傲慢与偏见」

摘要:出于各种原因,并非所有人都信任 DevOps 。有些人觉得 DevOps 只不过给开发者改善产品提供了一个途径而已,还有的人觉得 DevOps 是一堆悦耳的空头支票,甚至有人认为 DevOps ...

吴鉴鹰谈一个单片机初学者的傲慢与偏见

最近论坛上发了一个连载帖子——吴鉴鹰单片机实战项目精讲,因此受到不少网友的关注,在这里吴鉴谢谢各位网友的支持、关心和信任。       在帖子中留了几个群号,有两千多读者加了群,通过QQ向我询问了很多...

知识分子的傲慢与偏见 (2012-08-18 00:50:57)

转载▼   分类: 杂谈 经历了这么多的事情,见过了这么多不同种类的人,我一直在想,知识分子心里存在的傲慢与偏见是从哪里来,到哪里去的。现在我也许...
  • hnhbdss
  • hnhbdss
  • 2012年08月19日 10:31
  • 996

对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追

 我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追  赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#,   VB.Net   这样的大部  头,这让...

在一次也没有打开app的情况下能否接受到系统广播

我们的app需要监控系统的一些广播,比如电量变化,wifi变化,开机广播
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:没有傲慢也没有偏见
举报原因:
原因补充:

(最多只允许输入30个字)