41-复习题
16.9 复习题
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对象的声明。哪些方法不再需要显式定义?
2.在易于使用方面,指出string对象至少两个优于C-风格字符串的地方。
3.编写一个函数,用string对象作为参数,将string对象转换为全部大写。
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 dbl (new double);
5.如果可以生成一个存储高尔夫球棍(而不是数字)的栈,为何它(从概念上说)是一个坏的高尔夫袋子?
6.为什么说对于逐洞记录高尔夫成绩来说,set容器是糟糕的选择?
7.既然指针是一个迭代器,为什么STL设计人员没有简单地使用指针来代替迭代器呢?
8.为什么STL设计人员仅定义了迭代器基类,而使用继承来派生其他迭代器类型的类,并根据这些迭代器类来表示算法?
9.给出vector对象比常规数组方便的3个例子。
10.如果程序清单16.9是使用list(而不是vector)实现的,则该程序的哪些部分将是非法的?非法部分能够轻松修复吗?如果可以,如何修复呢?
11.假设有程序清单16.15所示的函数符TooBig,下面的代码有何功能?赋给bo的是什么值?
bool bo = TooBig<int>(10)(15);