C++|C++ vector 动态增长详解
内存增长相关的四个函数
size()、capacity()、reserve()、resize()
- size()函数返回的是已用空间大小,
- capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明* vector目前的空间已被用完,如果再添加新元素,则会引起vector空间的动态增长。
- reserve(n)预先分配一块较大的指定大小的内存空间,其中n为分配空间大小;
- resize()成员函数只改变元素的数目,不改变vector的容量。
内存增长是编译器自动完成的。包括重新分配内存空间、拷贝原空间、释放原空间三个过程。
具体策略为当添加元素时,如果vector空间大小不足,则会以原大小的1.5倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。
也就是说vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,不能保证原空间之后有可供配置的空间。
【C++|C++ vector 动态增长详解】这个动态增长过程会降低程序效率,因此可以使用reserve进行预分配空间来提高程序使用效率
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- NeuVector 会是下一个爆款云原生安全神器吗()
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 动态组件与v-once指令
- c++基础概念笔记
- iview|iview upload 动态改变上传参数
- react-navigation|react-navigation 动态修改 tabBar 样式
- K14|K14 9/15销售提问法D2
- 牛逼!C++开发的穿越丛林真人游戏,游戏未上线就有百万人气
- 动态|诗歌《在精神科诊室》发《小说与诗》(香港)报