内存增长相关的四个函数
size()、capacity()、reserve()、resize()
- size()函数返回的是已用空间大小,
- capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明* vector目前的空间已被用完,如果再添加新元素,则会引起vector空间的动态增长。
- reserve(n)预先分配一块较大的指定大小的内存空间,其中n为分配空间大小;
- resize()成员函数只改变元素的数目,不改变vector的容量。
vector内存动态增长过程
内存增长是编译器自动完成的。包括重新分配内存空间、拷贝原空间、释放原空间三个过程。
具体策略为当添加元素时,如果vector空间大小不足,则会以原大小的1.5倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。
也就是说vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,不能保证原空间之后有可供配置的空间。
这个动态增长过程会降低程序效率,因此可以使用reserve进行预分配空间来提高程序使用效率
网友评论