练习9.7:为了索引int的vector中的元素,应该使用什么类型?
解答:
std::vector<int>::size_type;
练习9.8:为了读取string的list中的元素,应该使用什么类型?如果写入list,又该使用什么类型?
解答:
std::list<std::string>::iterator || std::list<std::string>::const_iterator; //read
std::list<std::sttring>::iterator; //write
练习9.9:begin和cbegin两个函数有什么不同?
解答:
cbegin是一个const成员函数,返回容器的const_iterator类型;begin是非const,返回的是容器的iterator类型。
练习9.10:下面4个对象分别是什么类型?
vector<int> v1;
const vector<int> v2;
auto it1 = v1.begin(), it2 = v2.begin();
auto it3 = v1.cbegin(), it4 = v2.cbegin();
解答:
实例代码中有错误的地方,更正后应为:
auto it1 = v1.begin();
auto it2 = v2.begin(),it3 = v1.cbegin(), it4 = v2.cbegin();
it1为vector<int>::iterator;it2,it3,it4为vector<int>::const_iterator;
练习9.11:对6种创建和初始化vector对象的方法,每一种都给出一个实例。解释每个vector包含什么值。
解答:
vector<int> ivec; //0
vector<int> ivec(10); //0
vector<int> ivec(10,1); //1
vector<int> ivec{0,1,2,3,4}; //0,1,2,3,4
vector<int> ivec(other_vec); //same as other vec
vector<int> ivec(other_vec.begin(),other_vec.end()); //same as other_vec
练习9.12:对于接受一个容器创建其拷贝的构造函数,和接受两个迭代器创建拷贝的构造函数,解释它们的不同。
解答:
我们可以用接受两个迭代器创建拷贝的构造函数去复制一个容器的某一部分内容;但是如果使用接受一个容器创建其拷贝的方法,只能复制整个容器。
当一个容器初始化为另一个容器的拷贝时,两个容器的容器类型和元素类型都必须相同。当传递迭代器参数来拷贝一个范围时,就不要求容器类型和
元素类型是相同的。
练习9.13:如何从一个list<int>初始化一个vector<double>?从一个vector<int>又该如何创建?编写代码验证你的答案。
解答:
#include<iostream>
#include<list>
#include<vector>
using std::vector;using std::list;using std::cout;using std::endl;
int main()
{
list<int> ilist(4,4);
vector<int> ivec(4,5);
vector<double> dvec1(ilist.begin(),ilist.end());
for(auto k:ilist)
cout<<k<<" ";
cout<<endl;
for(auto i:dvec1)
cout<<i<<" ";
cout<<endl;
vector<double> dvec2(ivec.begin(),ivec.end());
for(auto t:ivec)
cout<<t<<" ";
cout<<endl;
for(auto j:dvec2)
cout<<j<<" ";
cout<<endl;
return 0;
}