C++primer(第五版)9.1节,9.2节,9.2.1节练习答案

练习9.1:对于下面的程序任务,vector、deque和list哪种容器最为适合?解释你的选择的理由。如果没有哪种容器优于其他容器,也请解释理由。

(a)读取固定数量的单词,将它们按字典序插入到容器中。我们将在下一章中看到,关联容器更适合这个问题。

(b)读取未知数量的单词,总是将新单词插入到末尾。删除操作在头部进行。

(c)从一个文件读取未知数量的整数。将这些数排序,然后将它们打印到标准输出。


解答:

(a)关联容器是最好的选择;在这里,我们可以选择vector或者deque,比选择list好。因为我们不需要在容器中间插入或者删除元素。

(b)选择deque;如果程序是需要在头部或者尾部而不是中间插入或删除元素,就用deque。

(c)选择vector;因为不需要在头部或者尾部插入或删除元素,如果你的程序有很多小元素和较大的空间开销,不要使用forward_list或者list。


练习9.2:定义一个list对象,其元素类型是int的deque。

解答:

std::list<std::deque<int>> ldi;


练习9.3:构成迭代器范围的迭代器有何限制?

解答:

有两个迭代器begin和end;它们指向同一个容器中的元素,我们可以通过反复递增begin来到达end。


练习9.4:编写函数,接受一对指向vector<int>的迭代器和一个int值。在两个迭代器指定的范围中查找给定的值,返回一个布尔值来指出是否找到。

解答:

bool findNum(std::vector<int>::iterator beg,std::vector<int>::iterator end,int num)
{
	for(auto itr=beg; itr!=end; ++itr)
		if(*itr==num)
			return true;
	return false;
}


练习9.5:重写上一题函数,返回一个迭代器指向所找到的元素。注意,程序必须处理未找到给定值的情况。

解答:

std:vector<int>:iterator findNum(std::vector<int>::iterator beg,std::vector<int>::iterator end,int num)
{
	for(auto itr=beg; itr!=end; ++itr)
		if(*itr==num)
			return itr;
	return end;
}


练习9.6:下面程序有何错误?你应该如何修改它?

list<int> lst1;

list<int>::iterator iter1 = lst1.begin(),

                           iter2 = lst1.end();

while(iter1<iter2) /* ... */

解答:

运算符“<”不能用于list,应该改为while(iter1 != iter2)。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值