1.重要的是要认识size() 是vector当前能合理访问的元素数,capacity()是vector实际内存占用的大小.
- 删除操作clear 或者erase只是改变了size,而实际的内存占用还是原来的最大占用。如果用index去访问还是可能访问到的。
- clear():的作用实际上是通过将size()设置为0,而内存不变,当下次push的时候会去把对应位置的内存进行覆盖。
- erase():改变size()减1,内存左移,大小不变
- resize(n)改变的是size大小为n,如果n<capacity()的大小,内存不变,若n>capacity()会将内存扩充到n,并将新增的内存赋予默认值。
- reserve(n)改变的是capacity大小,而size不变。
例子:
初始vec: size为5;capacity为5;内存为 {1,2,3,4,5}
clear之后: size为0;capacity为5;内存为 {1,2,3,4,5} 此时访问vec[2]、vec[4]等都能访问到
push_back(6):size为1;capacity为5;内存为 {6,2,3,4,5} vec[0]的内存值被覆盖。
push_back(7) size为2;capacity为5;内存为 {6,7,3,4,5} vec[1]的内存值被覆盖。
初始vec: size为5;capacity为5;内存为 {1,2,3,4,5}
erase掉第一个值:size为4;capacity为5;内存为{2,3,4,5,5}
erase掉第一个值:size为3;capacity为5;内存为{3,4,5,5,5}
erase掉第一个值:size为2;capacity为5;内存为{4,5,5,5,5}
那么我们想在用的时候彻底清空内存要怎样操作呢,比如vector<int> test
可以进行如下操作清空内存
vector<int>().swap(test)