C++Primer第五版 9.4节练习

练习9.35:解释一个vector的capacity和size有何区别。
答:size表示vector容器实际存储的元素数量,capacity表示vector无需在进行内存分配,可以连续存储元素的最大数量。

练习9.36:一个容器的capacity可能小于它的size吗?
答:不可能,如上所说,capacity 大于等于size

练习9.37:为什么list或array没有capacity成员函数?
答:list能够快捷地在中间位置插入和删除元素,存储的元素也非是连续的,因此需要不断地进行内存分配,所以无法预先给list分配额定内存大小。array作为一种特殊的容器,在初始化时,大小就已经固定,所以没有capacity成员函数。

练习9.38:编写程序,探究在你的标准库实现中,vector是如何增长的。
答:见 练习9.38.cpp

练习9.39:解释下面程序片段做了什么:

vector<string> svec;
svec.reserve(1024);//预先给svec分配1024个空间
string word;
while(cin >> word) //输入单词
    svec.push_back(word);
svec.resize(svec.size()+svec.size()/2); //重新分配空间为svec.size()+svec.size()/2


答说明;如果svec.size()+svec.size()/2 < 1024, 则capacity()为1024,超过则重新分配
见练习9.39.cpp

练习9.40:如果上一题中的程序输入了256个词,在resize之后容器的capacity可能是多少?如果读入了512个,1000个,或1048个词呢。
答:存了256个词之后,则256 + 256/2 = 384 < 1024 则capacity为1024
512 + 512/2 = 768 < 1024,则capacity为1024
1000+1000/2 = 1500 > 1024 capacity大于1500,具体依赖编译器环境
1048+1048/2 = 1572 > 1024,capacity 大于1572,具体依赖编译器环境
见练习9.40.cpp

练习9.38

/*
*练习9.38
*日期:2015/8/4
*问题描述:练习9.38:编写程序,探究在你的标准库实现中,vector是如何增长的。
*功能;
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec;
    cout << "vec(empty) " << "-size: " << vec.size() << " -capacity: " << vec.capacity() << endl << endl;

    for(int i = 0; i != 100; ++i)
        vec.push_back(i);
    cout << "vec " << "-size: " << vec.size() << " -capacity: " << vec.capacity() << endl;

    return 0;
}

练习9.39

/*
*练习9.39
*日期:2015/8/4
*问题描述:练习9.39:解释下面程序片段做了什么:
vector<string> svec;
svec.reserve(1024);//预先给svec分配1024个空间
string word;
while(cin >> word) //输入单词
    svec.push_back(word);
svec.resize(svec.size()+svec.size()/2); //重新分配空间为svec.size()+svec.size()/2

*功能;
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() 
{
    vector<string> svec;
    svec.reserve(1024);
    string word = "testing";
    int i = 0;
    while(i != 1025)
    {
        svec.push_back(word);
        ++i;
    }
    svec.resize(svec.size()+svec.size()/2);
    cout << svec.size() << endl;
    cout << svec.capacity() << endl;
    return 0;
}

练习9.40

/*
*练习9.40
*日期:2015/8/4
*问题描述:练习9.40:如果上一题中的程序输入了256个词,在resize之后容器的capacity可能是多少?如果读入了512个,1000个,或1048个词呢。
*功能;
*作者:Nick Feng 
*邮箱:nickgreen23@163.com 
*/

#include <iostream>
#include <string>
#include <vector>

using namespace std;

void test(vector<string> svec, int val)
{
    svec.reserve(1024);
    string word = "hi";
    for(int i = 0; i != val; ++i)
        svec.push_back(word);
    svec.resize(svec.size()+svec.size()/2);
    cout << val <<" word " << "-size:" << svec.size() << " -capacity:" << svec.capacity() << endl << endl;
 } 

int main()
{
    vector<string> svec,svec1,svec2,svec3;


    test(svec,256);
    test(svec,512);
    test(svec,1000);
    test(svec,1048);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值