Stanford抽象编程难点收集

C字符串和C++字符串 见http://www.cnblogs.com/MuyouSome/archive/2013/06/08/3127828.html



查资料说vector容器中不适合放push_front和pop_front。那为什么太慢呢?
回答转载自http://zhidao.baidu.com/link?url=avlgRllAXvKrhfU2JfFjI3JPa8v3AKbrIbBTcjWSkcpw_ArRK5ef97dJF6O8jnr-v1SfRi4w-XwMZ_N1nYMMZq
首先,你得要先明白,vector是开辟一块空间来作为数组来存放元素(随机迭代器),如果有了pop_front,pop_back这个功能则很容易造成内存碎片,pop_front会造成头部内存产生碎片,pop_back朝臣尾部内存产生碎片,所以不能像deque(双向迭代器)那样有pop_front, pop_back这样的完全相同的实现.其次才是性能上的问题,vector实现pop_front的功能可以这样:
vector<int> vi;
vi.push_back(1);
vi.push_back(2);
vi.push_back(3);
vi.erase(vi.begin());//等同于push_front
但是,这样实现的实质是,重新开辟内存放置元素后释放原先的内存,这样做的原因是放置内存碎片,在程序中,如果产生内存碎片则意味着这是内存泄露,是十分危险的一件事情,所以不能在stl中出现



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值