| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 《C++ Primer》第13章 13.5节习题答案 -> 正文阅读 |
|
[C++知识库]《C++ Primer》第13章 13.5节习题答案 |
《C++ Primer》第13章 拷贝控制 13.5节 动态内存管理类 习题答案 练习13.39:编写你自己版本的StrVec,包括自己版本的reserve、capacity(参见9.4节,第318页)和resize(参见9.3.5节,第314页)。 【出题思路】 本题练习设计自己管理内存的类。 【解答】
运行结果:? strVec=====================size==6 练习13.40:为你的StrVec类添加一个构造函数,它接受一个initializer_list<string>参数。 【出题思路】 本题练习设计列表初始化。 【解答】 通过begin和end获得列表的整个范围,利用辅助函数alloc_n_copy分配足够多的空间,并将范围中的元素拷贝过去即可:
练习13.41:在push_back中,我们为什么在construct调用中使用后置递增运算?如果使用前置递增运算的话,会发生什么? 【出题思路】 理解几个指针的含义。 【解答】 因为first_free指向第一个空闲位置,也就是最后一个string的尾后位置。当添加新string时,应该保存在first_free指向的位置,然后将first_free推进一个位置,因此后置递增运算恰好符合要求。 如果使用前置递增运算,则是先将first_free推进一个位置,然后将新string保存在新位置上。显然,这种方法意味着first_free指向最后一个string,而非尾后位置,与first_free的设定不吻合。 练习13.42:在你的TextQuery和QueryResult类(参见12.3节,第431页)中用你的StrVec类代替vector<string>,以此来测试你的StrVec类。 【出题思路】 练习StrVec的使用。 【解答】 对TextQuery.h、QueryResult.h和TextQuery.cpp做如下修改: 1. TextQuery.h中file成员的定义改为: 与第12章的练习类似,由于类的封装特性,主程序不用进行任何修改。 练习13.43:重写free成员,用for_each和lambda(参见10.3.2节,第346页)来代替for循环destroy元素。你更倾向于哪种实现,为什么? 【出题思路】 复习lambda的定义和使用。 【解答】 将for循环改成如下形式即可。注意,elements和first_free是string*类型,因此它们指出的范围中的元素是string类型。因此,lambda的参数s应该是string&类型,在lambda的函数体中应该取s的地址,用来调用destroy。 for_each(elements, first_free, [this](std::string &s) {alloc.destory(&s);}); 练习13.44:编写标准库string类的简化版本,命名为String。你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数。使用allocator为你的String类分配所需内存。 【出题思路】 本题练习定义自己管理内存的类。 【解答】 总体上需要注意的地方与StrVec的定义类似,只不过StrVec管理的元素为string,而String管理的元素为char。配套网站已有完整程序,读者可以尝试自己定义String,然后与配套网站中的代码进行对照。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:44:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |