Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
「C++ Primer plus 习题」第十六章复习题,希望能够帮助你!!!。
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对象提供了对自己的内存管理功能。
答案:
可以将一个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]); } }
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);
答案:
栈的LIFO(后进先出)特征意味着可能必须在到达所需要的球棍(club)之前,删除很多球棍。
答案:
集合将只存储每个值的一个拷贝,因此,5个5分将被存储为1个5分。
答案:
使用迭代器使得能够使用接口类似于指针的对象遍历不以数组方式组织的数据,如双向链表中的数据。
答案:
STL方法使得可以将STL函数用于指向常规数组的常规指针以及指向STL容器类的迭代器,因此提高了通用性。
答案:
可以将一个vector对象赋给另一个。vector管理自己的内存,因此可以将元素插入到矢量中,并让它自动调整长度。使用at()方法,可以自动检查边界。
答案:
这两个vector函数和random_shuffle()函数要求随机访问迭代器,而list对象只有双向迭代器。可以使用list模板类的sort()成员函数,而不是通用函数来排序,但没有与random_shuffle()等效的成员函数。然而,可以将链表赋值到矢量中,然后打算矢量,并将结果重新复制到链表中。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章