STL源码剖析

1. 当vector的内存用完了,它是如何动态扩展内存的?它是怎么释放内存的?用clear可以释放掉内存吗?是不是线程安全的?

  • vector内存用完了,会以当前size大小重新申请2* size的内存,然后把原来的元素复制过去,把新元素插上,然后释放原来的内存。
  • 引用《effective stl》的第十二条:当涉及 STL容器和线程安全性时,你可以指望一个 STL库允许多个线程同时读一个容器,以及多个线程对不同的容器做写入操作。你不能指望 STL库会把你从手工同步控制中解脱出来,而且你不能依赖于任何线程支持。必须自己去写多线程安全措施。
  • 一般我们释放vector里的元素使用clear,其实它不能释放内存,要想释放内存要使用swap,这样: 
vector v;
//.... 这里添加许多元素给v
//.... 这里删除v中的许多元素
vector(v).swap(v);
//此时v的容量已经尽可能的符合其当前包含的元素数量

 

你可能感兴趣的:(STL源码剖析)