vector预留空间

shienh 2020年02月06日 233次浏览

先看以下例子:

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[])
{
    vector<int>v;
   // v.reserve(10000);
    int num = 0;
    int *p = NULL;
    for(int i = 0; i < 10000;i++){
        v.push_back(i);
        if(p!=&v[0]){//每进入一次if 就vector就分配一次内存
            p=&v[0];
            num++;
        }
    }
    cout<<"num:"<<num<<endl;
    return 0;
}

运行结果:
image.png
意味着,在往变量v添加10000个元素的时候进行了24次的内存分配。如果添加的元素越多,那么分配的内存的次多也就越多,每次分配还要拷贝内存数据,大大降低了运行速度。将以上代码 // v.reserve(10000);的注释去掉,运行结果为:
image.png
只进行了一次的内存分配。在往vector中添加元素的时候,如果能够事先预估元素的个数,可以进行空间预留,减少内存分配次数