习题
针对每一习题,创建并测试(通过输出)定义的类的一些对象来验证你的设计和实现确实达到了预期要求。在涉及异常的地方,需要认真考虑错误产生的来源。
1.编写一个模板函数f(),该函数能够将一个vector<T>的元素加到另一个vector<T>的元素,例如,f(v1,v2)应该对v1的每个元素执行v1[i]+=v2[i]。
2.编写一个模板函数,该函数以vector<T>vt和vector<U>vu为参数并返回所有vt[i]*vu[i]之和。
3.编写一个模板类Pair,该类能够存储任何类型的值对。使用该类实现一个类似于我们在计算器中所使用的符号表(见7.8节)。
4.将12.9.3节中的Link类修改为模板,该模板以数值类型作为模板参数。然后使用Link<God>重做第12章的习题13。
5.定义Int类,该类包含一个int类的成员。定义该类的构造函数、赋值操作和+、-、*、/运算符。测试该类并根据需要对它进行完善(例如,定义<<和>>运算符实现方便的I/O)。
6.使用Number<T>类重新完成上面的习题,其中T可以是任何数值类型。尝试为Number实现%运算符并观察对Number<double>和Number<int>进行%运算的结果。
7.用一些Number执行习题2的程序。
8.用基本分配函数malloc()和free()(见附录C10.4)实现一个分配器(见14.3.7节)。令14.4节结束时定义的vector能对一些简单的测试用例正确运行。提示:在完整的C++参考手册中查阅“定位new”和“析构函数显式调用”。
9.使用分配器(见14.3.7节)重新实现vector::operator=()(见14.2.5节)。
10.实现一个简单的unique_ptr,仅需支持构造函数、析构函数、->、*和release()。特别地,不要实现其赋值操作或拷贝构造函数 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access