C++ primer 第五版 中文版 9.2.4 节练习
练习 9.11:对6种创建和初始化vector对象的方法,每一种都给出一个实例。解释每个vector包含什么值。
答:
int i = 321;
vector<int> vect; //默认初始化
vector<int> vect1(i); // 321个0 跟 vect5等价
vector<int> vect2 = vect1; //321个0
vector<int> vect3{ 1, 1, 2, 3, 5, 8 }; //列表初始化 1,1,2,3,5,8
vector<int> vect4 = { 1, 1, 2, 3, 5, 8, 13 }; //列表初始化1,1,2,3,5,8,13
vector<int> vect5(10); // 包含10个元素默认初始化
vector<int> vect6(10, 321); //包含10值为321的元素。
练习 9.12:对于接受一个容器创建其拷贝的构造函数,和接受两个迭代器创建拷贝的构造函数,解释它们的不同。
答:
接受容器的两个窗口的类型及其元素类型必须匹配。
接受迭代器创建的就不要求容器类型必须相同了,只要原来容器的元素类型可以转换新的容器的类型即可。
练习 9.13:如何从一个list<int> 初始化一个vector<double> ? 从一个 vector<int> 又该如何创建?编写代码验证你的答案。
答:
list<int> mylist = { 1, 1, 2, 3, 5, 8, 13 };
vector<int> myivector = { 1, 1, 2, 3, 5, 8 };
vector<double> mydvector(mylist.begin(),mylist.end()); //由于类型不同,所以不能直接拷贝,需要用迭代器范围来拷贝
vector<double> mydvector2(myivector.begin(),myivector.end());//由于类型不同,所以不能直接拷贝,需要用迭代器范围来拷贝
#include <iostream>
#include <list>
#include <vector>
using std::vector;
using std::list;
using std::cout;
using std::endl;
int main()
{
list<int> mylist = { 1, 1, 2, 3, 5, 8, 13 };
vector<int> myivector = { 1, 1, 2, 3, 5, 8 };
vector<double> mydvector(mylist.begin(),mylist.end()); //由于类型不同,所以不能直接拷贝,需要用迭代器范围来拷贝
vector<double> mydvector2(myivector.begin(),myivector.end());//由于类型不同,所以不能直接拷贝,需要用迭代器范围来拷贝
for (const auto a : mydvector)
cout << a << " ";
cout << endl;
for (const auto a : mydvector2)
cout << a << " ";
cout << endl;
return 0;
}