C++primer(第五版)9.2.2节,9.2.3节,9.2.4节练习答案

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





  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值