询问一个关于vector中capacity()和size()的问题

saigirl 2012-03-20 11:02:14
int main()
{
int inp =0;
vector<int> a;
cout<<"vec size: "<<a.size()<<endl;
cout<<"vec capacity: "<<a.capacity()<<endl;
while (inp != 10)
{
a.push_back(inp);
inp++;
}
cout<<"vec size: "<<a.size()<<endl;
cout<<"vec capacity: "<<a.capacity()<<endl;
a.reserve(20);
cout<<"After set reserve:"<<endl;
cout<<"vec size: "<<a.size()<<endl;
cout<<"vec capacity: "<<a.capacity()<<endl;

getchar();
getchar();
return 0;
}
结果为:

vec size: 0
vec capacity: 0
vec size: 10
vec capacity: 13
After set reserve:
vec size: 10
vec capacity: 20
但是如果我把while (inp != 10)改成while(cin>>inp, inp!=10) 然后输入1 3 4 10回车后结果为:
vec size: 0
vec capacity: 0
vec size: 3
vec capacity: 3
After set reserve:
vec size: 3
vec capacity: 20求各位牛人解释~~
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-03-26
  • 打赏
  • 举报
回复
capacity 是容量,就是在下一次给vector增加内存前最多可以容纳对象的个数。
size是vector中目前已经存在对象的个数。

两者完全不是一回事情。不过两者还是有一定的联系,比如当size = capacity了,这时候再往vector中增加元素,capacity就会自动增加,至于增加多少,那是和STL的实现有关。
yinyuping 2012-03-26
  • 打赏
  • 举报
回复
vector动态增长要对原来的内容全部copy一次,所以为了性能会预先分配部分空间,
saigirl 2012-03-26
  • 打赏
  • 举报
回复
额。。。可能是我问题没讲清楚。。。我是想问capacity的变化的原因。。。。[Quote=引用 3 楼 relaxisland 的回复:]

解释啥?
修改前后的size为何为 10 跟 3?

while (inp != 10)
{
a.push_back(inp);
inp++;
}
这个连续push 10 次,没啥疑问吧

修改后:
输入1 3 4 10, 就push了3次,就碰到了10啊,
所以size是3 了
[/Quote]
relaxisland 2012-03-20
  • 打赏
  • 举报
回复
解释啥?
修改前后的size为何为 10 跟 3?

while (inp != 10)
{
a.push_back(inp);
inp++;
}
这个连续push 10 次,没啥疑问吧

修改后:
输入1 3 4 10, 就push了3次,就碰到了10啊,
所以size是3 了



无事所所 2012-03-20
  • 打赏
  • 举报
回复
怎么了啊,很正常啊
bluewanderer 2012-03-20
  • 打赏
  • 举报
回复
STL都是有源代码的,你完全可以跟踪一下

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧