您的位置:首页 > 编程语言 > C语言/C++

C++Primer第五版 9.4节练习

2015-09-18 07:26 495 查看
练习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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: