练习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;
}