set中insert的元素添加的位置

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

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

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

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

转:https://blog.csdn.net/optman/article/details/2491189

猜你喜欢

转载自blog.csdn.net/Imagirl1/article/details/81385563
今日推荐