一、扩容原理
Vector
通过一个连续的数组存放元素,如果集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,再插入新增的元素。
二、扩容倍数
1.5倍或2倍
不同编译器扩容方式不同:
编译器 | 扩容倍数 |
---|---|
GCC | 2 |
MSVC | 1.5 |
CLANG | 1.5 |
三、如何避免空间浪费
方法1:使用swap收缩内存
vector<int> v;
……
vector<int>(v).swap(v);
方法2:使用reserve预留空间
vector<int> v;
v.reserve(N);
……
四、测试
#include <iostream>
#include <vector>
using namespace std;
void myPrint(vector<int>& v) {
cout << "实际数量:" << v.size(<