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:解释下面程序片段做了什么:
答说明;如果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.39
练习9.40
答: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; }
相关文章推荐
- C++Primer第五版 9.3.5节练习
- C++Primer第五版 9.3.4节练习
- C++Primer第五版 9.3.3节练习
- C++Primer第五版 9.3.2节练习
- C++程序与非C++程序的链接
- 单例模式简介以及C++版本的实现
- c++ primer第五版(中文)习题答案 第十章第一节第一小节-概述
- C++:数组排列组合的问题。
- 插入排序(C/C++)
- const在函数前与函数后的区别
- c++设计模式----Decorator(装饰)
- C语言 可变长度的数组 -2
- TwinCAT 3中基于UDP协议通讯的C++实现
- Leetcode之String to Integer (atoi)
- C++面试题
- 字符替换 利用c++string类型
- 关于C语言中数据类型的转化方式
- C语言中的break、continue和goto语句
- C++Primer Plus 第十一章-运算符重载和友元函数
- C语言中经常遇到的问题:执行时显示进度条,然后卡住