看到网上很多人说解释reserve函数可以避免内存的重新分配,我看得云里雾里,决定自己做实验来测试一下。到底使用reserve好处在哪。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
typedef vector<int>Vint;
Vint p;
p.push_back(100); //随意初始化一个数。
int *p1 = &p[0]; //取得为p分配这块内存的首地址。
cout << "p 的原始地址为:" << p1 << endl;
int reallocatetime = 0; // 初始化重新分配内存的次数为0
for (int i = 0; i < 10000; ++i){
p.push_back(i);
if (p1 != &p[0]){
reallocatetime ++; //p的首地址发生变化,内存重新分配
cout << "第" << reallocatetime << "次" << "重新分配内内存之后的首地址为:" << &p[0] << endl;
p1 = &p[0];
}
}
return 0;
}
output:
下面使用reserve函数预先为p预留一段连续的空间:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
typedef vector<int>Vint;
Vint p;
<u><span style="color:#ff0000;">p.reserve(1000); </span></u> //新增加
p.push_back(99); //随意初始化一个数。
int *p1 = &p[0]; //取得为p分配这块内存的首地址。
cout << "p 的原始地址为:" << p1 << endl;
int reallocatetime = 0; // 初始化重新分配内存的次数为0
for (int i = 0; i < 10000; ++i){
p.push_back(i);
if (p1 != &p[0]){
reallocatetime ++; //p的首地址发生变化,内存重新分配
cout << "第" << reallocatetime << "次" << "重新分配内内存之后的首地址为:" << &p[0] << endl;
p1 = &p[0];
}
}
return 0;
}
output:
程序为p重新分配内存的次数明显变少了