「C++ Primer plus 习题」第十六章复习题

(1) 2024-10-08 11:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
「C++ Primer plus 习题」第十六章复习题,希望能够帮助你!!!。

「C++ Primer plus 习题」第十六章复习题_https://bianchenghao6.com/blog__第1张

1.考虑下面的声明:

class RQ1 { private: char *st; //points to C-style string public: RQ1() {st = new char[1]; strcpy(st,""); } RQ1(const char *s) {st = new char [strlen(s) + 1]; strcpy(st,s); } RQ1(const RQ1 &rq) {st = new char [strlen(rq.st) + 1]; strcpy(st,rq.st); } ~RQ1() {delete [] st}; RQ & operator=(const RQ &rq); //more stuff }; 

将它转换为使用string对象的声明。哪些方法不再需要显式定义?

答案:

#include <string> using namespace std; class RQ1 { private: char *st; //points to C-style string public: RQ1():: st("") {} RQ1(const char *s):: st("") {} RQ1(const RQ1 &rq) {st = new char [strlen(rq.st) + 1]; strcpy(st,rq.st); } ~RQ1() {}; //more stuff }; 不再需要显式复制构造函数、析构程序和赋值运算符,因为string对象提供了对自己的内存管理功能。 

2.在易于使用方面,指出string对象至少两个优于C-风格字符串的地方。

答案:

可以将一个string对象赋给另一个。 string对象提供了自己的内存管理功能,所以一般不需要担心字符串超出存储容量。 

3.编写一个函数,用string对象作为参数,将string转换为全部大写。

答案:

#include <string> #include <cctype> using namespace std; void ToUpper(string & str) { for (int i =0; i < str.size(); i ++) { str[i] = toupper(str[i]); } } 

4.从概念上或语法上说,下面哪个不是真正使用auto_ptr的方法(假设已经包含了所需的头文件)?

auto_ptr<int> pia(new int[20]);

auto_ptr<string> (new string);

int rigue = 7;

auto_ptr<int>pr(&rigue);

auto_ptr db1 (new double);

答案:

auto_ptr<int> pia(new int[20]); //错误,应该使用new,而不是new[], 改成:auto_ptr<int> pia(new int); auto_ptr<string> (new string); //错误,没有指针成员 ,改成 auto_ptr<string>pia (new string); int rigue = 7; auto_ptr<int>pr(&rigue); //错误,地址不允许被用来new,改成:auto_ptr<int>pr(new int); auto_ptr db1 (new double); //错误,没有指出double类型,改成 auto_ptr<double> db1 (new double); 

5.如果可以生成一个存储高尔夫球棍(而不是数字)的栈,为何它(从概念上说)是一个坏的高尔夫袋子?

答案:

栈的LIFO(后进先出)特征意味着可能必须在到达所需要的球棍(club)之前,删除很多球棍。 

6.为什么说对于逐洞记录高尔夫成绩来说,set容器是糟糕的选择?

答案:

集合将只存储每个值的一个拷贝,因此,5个5分将被存储为1个5分。 

7.既然指针是一个迭代器,为什么STL设计人员没有简单地使用指针来代替迭代器呢?

答案:

使用迭代器使得能够使用接口类似于指针的对象遍历不以数组方式组织的数据,如双向链表中的数据。 

8.为什么STL设计人员仅定义了迭代器基类,而使用继承来派生其他迭代器类型的类,并根据这些迭代器类来表示算法?

答案:

STL方法使得可以将STL函数用于指向常规数组的常规指针以及指向STL容器类的迭代器,因此提高了通用性。 

9.给出vector对象比常规数组方便的3个例子。

答案:

可以将一个vector对象赋给另一个。vector管理自己的内存,因此可以将元素插入到矢量中,并让它自动调整长度。使用at()方法,可以自动检查边界。 

10.如果程序清单16.9是使用list(而不是vector)实现的,则该程序的哪些部分将是非法的?非法部分能够轻松修复吗?如果可以,如何修复呢?

答案:

这两个vector函数和random_shuffle()函数要求随机访问迭代器,而list对象只有双向迭代器。可以使用list模板类的sort()成员函数,而不是通用函数来排序,但没有与random_shuffle()等效的成员函数。然而,可以将链表赋值到矢量中,然后打算矢量,并将结果重新复制到链表中。 

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复