【C++学习笔记】标准库容器Vector可变长度实现原理
vector是C++中标准库容器的一种,vector与C++基本类型数组最大的不同是:数组定长,在初始化时必须定义长度,且不可再添加元素;vector可使用vec.pusu_back()来动态增加元素。
数组和vector都是线性表的顺序存储结构。
数组在定义时就规划了一片固定长度的内存空间,一般不可增加,若要再增加,需要重新申请内存;
那么,vector的动态增加元素是怎么实现的呢?vector其实也是在定义的时候就规划了一篇内存空间,但是内存空间比定义的size要大,也就是说预留了一部分内存空间来用于存储新增的元素。而且还可以自己定义需要预留的空间大小,vec.reserve() 这样就不会对内存空间造成太大的浪费。
总的来说,数组是C++的基本类型,不可增长,空间利用效率高,但是不是很灵活实用,如果溢出的话还可能有存在很大的程序安全问题;vector是标准库定义的类模板,支持的函数非常丰富,而且支持动态添加,但是需要预留一部分空间作为预留空间,存在一定的浪费,但是可以通过自定义预留空间最小化空间浪费。vector比数组要实用很多。