vector以连续的数组存放数据,当vector空间已满时会申请新的空间并将原容器中的内容拷贝到新空间中,并销毁原容器,存储空间的重新分配会导致迭代器失效,因为分配空间后需要进行拷贝,编译器会预分配更多空间以减少发生拷贝影响程序效率。
扩容的大小叫做扩容因子,扩容因子由编译器决定,VS的扩容因子为1.5,G++中,扩容因子为2。如果个人电脑是windows一般不用G++,而是用VS的IDE来编译运行,如果是linux系统,一般用G++,Mac系统一般用clang(linux也可以用clang,但是G++是主流。G++就是将包含代码的文本文件编译成可执行文件,然后再能执行。
扩容因子的影响:
- 扩容因子大,每次需要分配的新内存空间越多,分配空间耗时。空闲空间较多,内存利用率低。
- 扩容因子小,需要再分配的可能性更高,扩容耗时。空闲空间较少,内存利用率较。一般认为扩容因子1.5优于2.0,原因是以1.5作为扩容因子可以实现复用释放的内存空间。
- 以2为扩容因子时,分配空间为:1,2,4,8,16
-
分配空间 空闲空间 1 0 2 1 4 1+2=3 8 3+4=7 16 7+8=15
-
从上述表中可以看到空闲空间始终小于分配的空间。
如果扩容因子是1.5,分配空间为:1,2,3,4,6,9
分配空间 | 空闲空间 |
1 | 0 |
2 | 1 |
3 | 1+2=3 |
4 | 3+3=6 |
6 | 6+4=10 |
随着分配空间增大,之前释放的空闲空间能够满足当次扩容所需的空间,实现内存的复用。
————————————————
版权声明:本文为CSDN博主「CCCSR」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Rengachan/article/details/109604104