注册 登录
编程论坛 C++教室

容器类中reserve()的用法、作用?

aipb2007 发布于 2007-03-22 22:25, 2286 次点击

比如vector中

vector<classA> List; //classA 是一个类类型
List.reserve(4); //什么作用???不用这个函数有什么不妥?
//和resize()有什么区别??

5 回复
#2
江南孤峰2007-03-23 11:06

找STL查看一下

#3
aipb20072007-03-24 14:45
找的到就不问了!
#4
dlcdavid2007-03-24 14:46

运行一下就行了

[QUOTE]
#include <iostream>
#include <vector>
#include <string>
using namespace std;

void print_size(vector<int> &);

int main()
{
vector<int> ivec(4);
cout<<"size为当前元素数量、capacity为当前空间总量\n";
print_size(ivec);
ivec.push_back(0);
print_size(ivec);
while(ivec.size()!=ivec.capacity())
ivec.push_back(0);
ivec.push_back(0);
print_size(ivec);
cout<<"可看出每当容器必须分配空间时,它加倍当前容量\n";
//测试reserve\resize
ivec.resize(0);
print_size(ivec);
cout<<"可看出resize清空了所有元素,空间总量没变\n";
ivec.reserve(50);
print_size(ivec);
cout<<"可看出reserve设置了空间总量\n";
//装满容器
while(ivec.size()!=ivec.capacity())
ivec.push_back(0);
print_size(ivec);
cout<<"装满容器后并没有重新分配空间\n我们再加一个元素上去\n";
ivec.push_back(0);
print_size(ivec);
cout<<"重复刚才的过程\n";
while(ivec.size()!=ivec.capacity())
ivec.push_back(0);
ivec.push_back(0);
print_size(ivec);
cout<<"\n\n最后reserve并不是定义了一种分配策略"
<<"\n而是定义了当前的空间总量" <<endl;
return 0;
}

void print_size(vector<int> &ivec)
{
cout<<"size: " <<ivec.size()
<<" capacity: " <<ivec.capacity()
<<endl;
}
[/QUOTE]


[此贴子已经被作者于2007-3-24 14:49:20编辑过]

#5
jasonxie2007-03-27 20:36
拉头!
reserve()把元素个数用作参数,就可以设置vector的最小容量。如果传送给reserve()的值小于当前的容量,容量就保持不变。
resize()是修改容器的大小,reserve()是修改容器的容量。
#6
aipb20072007-03-27 21:30
OK
1