您的位置:首页 > 其它

第十二章 12.2.2节练习 & 12.3.1节练习

2014-09-05 00:13 169 查看
练习12.26

用allocator重写第427页中的程序。

解答:

#include <iostream>
#include <memory>
#include <string>

using namespace std;

int main(){
	string *const p = new string[10]; // 构造n个空string
	string s;
	string *q = p; // q指向第一个string
	while (cin >> s && q != p + 10){
		*q++ = s;  // 赋予*p一个新值
	}
	const size_t size = q - p; // 记住我们读取了多少个string
	// 使用数组
	delete[] p; // p指向一个数组; 记得用delete[]来释放
}
这是原始程序,这里我用10把n替换了。

#include <iostream>
#include <memory>
#include <string>

using namespace std;

int main(){
	allocator<string> alloc;
	auto const p = alloc.allocate(10); // 构造10个空string
	string s;
	auto q = p; // q指向第一个string
	while (cin >> s){
		alloc.construct(q++, s);
	}

	const size_t size = q - p; // 记住我们读取了多少个string
	// 使用数组
	alloc.deallocate(p, size);
}
修改后的。

allocator在STL中算是比较神秘的,这里用到就是分配内存的功能。

对内存中的内容,做不了读取操作,只能进行构造写入。

所以,大型项目中可以用来做内存管理;小型项目中几乎用不着。

练习12.27

TextQuery和QueryResult类只使用了我们已经介绍过的语言和标准库特性。

不要提前看后续章节的内容,只用已经学到的知识对这两个类编写你自己的版本。

解答:

其实,看不看后面章节也无所谓。

这题就不写类的实现了,这里对这两个类进行分析,说一下实现思路,也许在以后我再看这道题的时候会有更好的方案。

TextQuery 就是以各种方式对文本进行存储,比如,每一行都是什么内容,文本一共有多少个单词(不重复的和重复的),每个单词对应的行。

QueryResult也就是交互部分,可以对文本进行各式各样的查询。比如,第几行什么内容,某个单词出现了多少次,都出现在了那几行中等。

参考书中的实现,来添加你要的功能,我认为才是这道题真正想要表达的。

练习12.28

编写程序实现文本查询,不要定义类来管理数据。你的程序应该接受一个文件,并与用户交互来查询单词。

使用vector、map和set容器来保存来自文件的数据并生成查询结果。

解答:

不写类的实现了。

如果要做,可以根据不同容器的特点与想要实现的功能对应起来。

练习12.29

我们曾使用do while循环来编写管理用户交互的循环(参见5.4.4节,第169页)。

用do while重写本节程序,解释你倾向于哪个版本,为什么。

解答:

个人喜欢while形式,不喜欢do while形式,可能受到linux shell实现的影响。

不过,do while也是可以用的,这里需要看是闲者的喜好和实现的难度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: