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

来源:互联网 发布:淘宝订单管理 编辑:程序博客网 时间:2024/06/06 09:24

练习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)。




0 0