习题9.32

Exercise 9.32:

Explain what the following program does:

解释下面程序实现的功能:

     vector<string> svec;
     svec.reserve(1024);
     string text_word;
     while (cin >> text_word)
             svec.push_back(text_word);
     svec.resize(svec.size()+svec.size()/2);

If the program reads 256 words, what is its likely capacity after it is resized? What if it reads 512? 1,000? 1,048?

如果该程序读入了 256 个单词,在调整大小后,该容器可能是多少?如果读入 512,或 1000,或 1048 个单词呢?


这个题目问题是最后容器的容量是多少,即capacity是多少,而不是size是多少;

读入256,需要重新分配的size=256+256/2  不会超出1024,所以capaciy=1024;

读入512, 需要重新分配的size=512+512/2=768,小于1024,所以capacity=1024;

读入1000,需要重新分配的size=1000+500=1500,已经大于1024,所以需要增加capaciy,按照标准原则,增加的容量为当前capacity的二分之一,所以capacity=1024+1024/2=1536

读入1048,这里要仔细分析下:

                       当读入到第1025个元素时,容器会有一次隐式的自增加的过程,就是增加到上面的1536,此时可以把1048个元素都读入;接着执行svec.resize(svec.size()+svec.size()/2);计算出需要分配的size=1048+1048/2 = 1572,已经大于1536了,所以此时还需要一次隐式的自增,即capacity =1536+1536/2 =2304


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值