ylww

随笔仅作学习记录,请辩证参考!!!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  166 随笔 :: 0 文章 :: 0 评论 :: 11630 阅读

 动态数组是指会自动扩充空间,其采用的也是动态内存。

1. vector是表示可变大小数组的序列容器.(因此其空间存在于堆上)

2. 就像数组一样,vector也采用的连续存储空间来存储元素,也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效,但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理.(在我们向vector中插入元素的时候,该容器会在代码中判断容器的空间是否够用,不够则要进行扩容)

3. 本质讲,vector使用动态分配数组来存储它的元素,当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间,其做法是,分配一个新的数组,然后将全部元素移到这个数组,就时间而言,这是一个相对代价高的任务,因此每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小.

4. vector分配空间策略: vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大,不同的库采用不同的策略权衡空间的使用和重新分配,但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的.

5. 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,以一种有效的方式动态增长.

6. 与其它动态序列容器相比 (deques, lists and forward_lists) vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效,对于其它不在末尾的删除和插入操作,效率更低,比起lists和forward_lists统一的迭代器和引用更好.

7.使用时主要包含头文件: #include <vector>
————————————————
版权声明:本文为CSDN博主「陆陆陆ovo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_49312527/article/details/124241175

 

 

 默认构造函数的元素个数(size)为0,所占内存空间(capacity)为0。因此:

在默认构造的容器中(比如v1)插入数据后,size和capacity不一定相同。

 vector<int>  v2(10);  //构造时就分配空间,size值和capacity的值相同,同时插入十个元素,元素的值都为0.

 vector<int> v2(10, 666); //构造,且将值都赋值为666

vector<int> v3(v2);  //拷贝构造函数

vector<int> v4(v2.begin()+3, v2.end());  //v2.begin()是迭代器,本质是指针。选取这段区间来构造。

int test[ ] = {1, 2, 3, 4, 5};   vector<int> v5(test, test+2);   //只传入 1, 2 两个元素。

 

 

赋值的时候,capacity不一定会和size一起改变。原本capacity很大时,赋值一个在capacity范围内的多个元素时,

仅仅是size改变,capacity并不会改变。(不会重新开辟新空间。)

 

 

 

 

返回类型为空, int && _Val是指对右值的引用,这是c++11新特性。

 

 

 

 

 

 

 

删除的时候,后面若有元素将会往前填补空间。

 

 

 

 

posted on   理想主义者光芒万丈  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示