11.STL中vector的实现 、vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因

STLvector的实现https://www.cnblogs.com/Braveliu/p/6264543.html
vector使用注意事项及原因https://www.cnblogs.com/simonote/p/9265374.html
vector中push_back()扩充机制https://www.cnblogs.com/yocichen/p/10574819.html

  • vector就是一个动态增长的数组,里面有一个指针指向一片连续的空间,当空间装不下的时候,会申请一片更大的空间,将原来的数据拷贝过去,并释放原来的旧空间。当删除的时候空间并不会被释放,只是清空了里面的数据。对比array是静态空间一旦配置了就不能改变大小。
  • vector的动态增加大小的时候,并不是在原有的空间上持续新的空间(无法保证原空间的后面还有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,并释放原空间。在VS下是1.5倍扩容,在GCC下是2倍扩容。
  • vector,pushback触发扩容一定是增长两倍,insert触发的扩容 oldsize+max(oldsize,n)。oldsize是已经用的大小(不是可用大小),n是新插入元素个数
  • 存到vector里的数据是在栈上还是堆上?
    vector中的空间都是通过分配器获得的,分配器又是通过operator new -> malloc 分配空间的,所以vector存储的元素都是在堆上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章