练习9.11:对6种创建和初始化vector对象的方法,每一种都给出一个实例,解释每个vector包含什么值。
答: 见 练习9.11.cpp
练习9.12:对于接受一个容器创建其拷贝的构造函数,和接受两个迭代器创建拷贝的构造函数,解释他们的不同。
答:为了创建一个容器为另一个容器的拷贝,两个容器的类型及其元素的类型必须匹配。
当用迭代器参数来拷贝一个范围时就不要求容器类型是相同的了,而且,新容器和原容器中的元素类型也可以不同,只要能将拷贝的元素转换。(参考P300 9.2.4节)
练习9.13:如何从一个list<int>
初始化一个vector<double>
?从一个vector<int>
又该如何创建?编写代码验证你的答案。
答:使用第二种初始化方式
见 练习9.13.cpp
练习9.11
/*
*练习9.11
*2015/7/27
*问题描述:对6种创建和初始化vector对象的方法,每一种都给出一个实例,解释每个vector包含什么值。
*功能:可变参数的列表
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string example("Testing!");
vector<string> vec1;
vec1.push_back(example);
vector<string> vec2(vec1);
vector<string> vec3 = vec2;
vector<string> vec4{"This","is","a","testing!"};
vector<string> vec5={"This","is","a","testing!"};
auto iter1 = vec5.begin();
auto iter2 = vec5.end();
vector<string> vec6(iter1,iter2);
for(auto i = 0; i!= vec1.size(); ++i)
cout << vec1[0] << endl;
for(auto i = 0; i != vec2.size(); ++i)
cout << vec2[0] << endl;
for(auto i = 0; i != vec3.size(); ++i)
cout << vec3[0] << " ";
cout << endl;
for(auto i = 0; i != vec4.size(); ++i)
cout << vec4[i] << " ";
cout << endl;
for(auto i = 0; i != vec5.size(); ++i)
cout << vec5[i] << " ";
cout << endl;
for(auto i = 0; i != vec6.size(); ++i)
cout << vec6[i] << " ";
cout << endl;
return 0;
}
练习9.13
/*
*练习9.13
*2015/7/27
*问题描述:练习9.13:如何从一个list<int>初始化一个vector<double>?从一个vector<int>又该如何创建?编写代码验证你的答案。
*功能:可变参数的列表
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
#include <list>
#include <vector>
using namespace std;
int main()
{
list<int> li={1,2,3,4,5,6,7,8,9,10};
auto iter1 = li.begin();
auto iter2 = li.end();
vector<int> vec2 = {10,9,8,7,6,5,4,3,2,1};
while(iter1 != iter2)//list不支持元素的随机访问
{
cout << *iter1 << " ";
++iter1;
}
cout << endl;
vector<double> vec1(li.begin(),li.end());
//注意,这里不要写iter1,iter2,否则后果很严重
for(auto i = 0; i != vec1.size(); ++i)
cout << vec1[i] << " ";
cout << endl;
vector<double> vec3(vec2.begin(), vec2.end());
for(auto i = 0; i != vec3.size(); ++i)
cout << vec3[i] << " ";
cout << endl;
return 0;
}