vector容器之reserve函数的讲解(c++)
下面来介绍一下reserve的作用,前面我们介绍了swap函数可以减少内存的浪费,reserve函数也有类似的作用:首先我们来看一下没有使用reserve函数前,我们的编译器需要开辟多少次,且容量的大小:#include<iostream>using namespace std;#include<vector>void print(vector<int>&
·
下面来介绍一下reserve的作用,前面我们介绍了swap函数可以减少内存的浪费,reserve函数也有类似的作用:
首先我们来看一下没有使用reserve函数前,我们的编译器需要开辟多少次,且容量的大小:
#include<iostream>
using namespace std;
#include<vector>
void print(vector<int>&v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v.at(i) << " ";
}
cout << endl;
}
void test()
{
int num = 0;
int* p = NULL;
vector<int>v3;
for (int i = 0; i < 100000; i++)
{
v3.push_back(i);
if (p != &v3[0])
{
p = &v3[0];
num++;//num表示更换了多少次内存空间,也意味着开辟了多少次内存空间
}
}
cout << "容量为:" << v3.capacity()<<endl;
cout << "更换内存的次数:" << num << endl;
}
int main()
{
test();
system("pause");
return 0;
}
结果如下:
再来看添加了reserve函数后的代码:
#include<iostream>
using namespace std;
#include<vector>
void print(vector<int>&v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v.at(i) << " ";
}
cout << endl;
}
void test()
{
int num = 0;
int* p = NULL;
vector<int>v3;
v3.reserve(100000);//给v3预留这么多内存空间
for (int i = 0; i < 100000; i++)
{
v3.push_back(i);
if (p != &v3[0])
{
p = &v3[0];
num++;//num表示更换了多少次内存空间,也意味着开辟了多少次内存空间
}
}
cout << "容量为:" << v3.capacity()<<endl;
cout << "更换内存的次数:" << num << endl;
}
int main()
{
test();
system("pause");
return 0;
}
仔细对比就知道,只是添加了一行:
v3.reserve(100000);
看结果:
容量没有上面的大,可以说就是我们想要开辟的这些数组的空间,刚刚好,也不需要多次开辟内存空间,只需要一次就好了。
总结:reserve函数能够节省空间,且能够减少内存开辟次数,但是缺点也很明显,我们需要提前知道我们开辟空间的大小,当然了reserve函数的参数也可以填成这样:
v3.reserve(v3.size());
但是我们把这行代码放那呢?放哪好像都不对,我们可以自己输入我们想要开辟的个数,例如以下代码:
#include<iostream>
using namespace std;
#include<vector>
void print(vector<int>&v)
{
for (int i = 0; i < v.size(); i++)
{
cout << v.at(i) << " ";
}
cout << endl;
}
void test()
{
int num = 0;
int* p = NULL;
vector<int>v3;
int m;
cout << "请输入想要开辟的内存大小m:" << endl;
cin >> m;
v3.reserve(m);//给v3预留这么多内存空间
for (int i = 0; i <m; i++)
{
v3.push_back(i);
if (p != &v3[0])
{
p = &v3[0];
num++;//num表示更换了多少次内存空间,也意味着开辟了多少次内存空间
}
}
cout << "容量为:" << v3.capacity()<<endl;
cout << "更换内存的次数:" << num << endl;
}
int main()
{
test();
system("pause");
return 0;
}
这里我们就可以自己控制了。
本次分享到此就结束了,如有错误,还望伙伴们指正!!!
更多推荐
已为社区贡献1条内容
所有评论(0)