黄海全ID:optman
41936次访问,排名2600好友1人,关注者1
比思想更有力的是行动
optman的文章
原创 106 篇
翻译 5 篇
转载 6 篇
评论 16 篇
最近评论
yumn2004:这篇文章对我有很大的帮助,谢谢楼主!
hdnero:wow power leveling
zhanghs202:你那个只是讨论一个主题或者两个人谈论一个话题而已
zhanghs202:你说的那个叫需求吗?肯定不叫,如果你不知道你要开发的东西是什么,你怎么下笔啊?
zhanghs202:听说丰田汽车早上9点上班,8:50的时候,安装车间一个零件都看不到,一个人也没有。晚上6点下班,6:10分的时候,车间里同样是看不到一个零部件。如此完美的景象,和公司的机制有莫大的关系。制度化,反腐倡廉的最佳利器是法律,制度化,以及保障机制。然后带来政府的工作的效率。软件研发的制度化,是保障沟通效率,正确高效工作的保证。
文章分类
    收藏
      相册
      Blog
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 std::set的insert会把新元素放在什么位置?收藏

      新一篇: 危险的线程 | 旧一篇: 时空穿梭和系统重启

      我其实是希望放在第一个,这样我就可以用begin来访问到该新元素--正在在做一个连接池,希望把刚用完的连接放到最前面,这样就可以经常用到,而不常用的就逐渐废弃断掉了。从代码的实际运行情况来看,就是我所希望的模式,但是否偶然现象?

       

      于是找到了这篇帖子,原来std::set内部并不是以数组来保存元素的,而是用树。这样的话,所谓的前后并没有什么意义!这个早就应该想到的!STL集合就是通过枚举器(iterator)来封装内部的存贮空间和算法的,只要用begin,next就可以遍历所有元素而不用管其内部的存贮位置。当然了std::set还是有一个固定“存贮位置”的,也就是说在其它元素没有变化的情况下,把位于begin位置的元素取出来(erase),再放回去(insert),还是会处于begin的位置的--这里说的是枚举的顺序。

       

      如此看来,我前面的做法是没有错的。不过,这多半是因为运气好。因为,从insert这个函数名称上就没有任何保证说一定会放到begin位置。而且,很有可能换用了别的集合类型,比如把set改成list,就达不到前面的预期的效果了。所以,这段代码存在隐患,时间久了之后可能后来人就会忘记这个事情了,把set::insert换成别的--Bug就很容易出现。

       

      所以代码还是不能用靠小伎俩,要把意图写得清晰明了比较好。那么什么集合对象可以明确的指定插入位置呢?vector::insert?

      发表于 @ 2008年05月28日 17:41:03|评论(loading...)|编辑

      新一篇: 危险的线程 | 旧一篇: 时空穿梭和系统重启

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © optman