美文网首页C++学习笔记
如何理解C++primer第15章的Query文本查询程序

如何理解C++primer第15章的Query文本查询程序

作者: LMerCy | 来源:发表于2017-12-27 18:28 被阅读0次

    这篇文章是本人在学习C++primer第15章Query程序时对自己所遇到困惑的总结,我发现其实这节最难理解的正如书中所说是理解这个程序的设计思路。因此本文也主要是记录本人如何理解这个程序的设计思路的。

    要理解这一章的文本查询程序应回顾下12.3.2中的TextQuery类,该类还是比较容易理解,就不在此赘述。15.9.1节首先讲了为什么不直接继承12.3.2节的TextQuery类,来实现不同类型的查询。书中举的例子就是如果用这种方法的话,要实现逻辑非查询,就必须要知道除了待查询的单词之外的所有单词,然而这一般是不可能的。所以才设计出一套独立的继承体系:

其中每个类都将包含eval和rep两种方法。其中eval函数接收一个TextQuery用于保存文本和所有单词及其出现的行的集合,返回一个包含特定单词及其出现行的QueryResult类。为什么要有这个函数也是比较好理解的,因为无非输入是所有内容,而输出是一种经过处理的特殊内容。

    下面开始设计这个程序。首先要明确需求,即最终代码应该要能实现如下形式的查询:查询形式

std::ifstream file("test.txt");

TextQuery tQuery(file);

Query q = Query("fiery") & Query("bird") | Query("wind"); 

std::cout << q.eval(tQuery);

这是我从Github上一份已经设计好的程序中拷贝过来的测试主程序,看到这种查询方式,对我们理解这一节有非常大的帮助(书中只给了第三句,非常不方便我们理解这套程序)。如果我们把这个作为一个需求,就不难理解书中为什么要隐藏之前想要设计的那一套继承体系的类。因为我们并不想用户去使用各种不同的类来实现不同形式的查询,如果只用一个Query类来实现不是最好的吗?

    Query q的目的是构造一张图:

而q.eval(tQuery)就是沿着这张图进行求值(显示)的过程。这样我们就很容易理解为什么要给Query设计eval和rep操作。q = Query("fiery")的含义是q绑定到一个存放着string的新WordQuery对象上。对于重载运算符应该需要完成的任务,例如AndQuery就应该是保存两个Query对象,其他类似。

    如果理解了以上内容再去看书中的内容的话,就容易很多了。

 待更:如何构建这张图,以及如何沿着这张图求值。

相关文章

  • 如何理解C++primer第15章的Query文本查询程序

    这篇文章是本人在学习C++primer第15章Query程序时对自己所遇到困惑的总结,我发现其实这节最难理解的...

  • 网球常用

    request 请求 response 文本 Body 响应文本 modify-query 修改查询 请...

  • 使用标准库:文本查询程序

    C++ Primer 5th 第12章动态内存使用标准库:文本查询程序程序名称:文本查询程序程序功能:允许用户在一...

  • Hibernate框架的查询方式

    Hibernate框架的查询方式 Query查询接口 具体的查询代码如下1.查询所有记录/Query query ...

  • SQL语句要点笔记(一)

    SQL: 结构化查询语言(Structural Query Language) SQL要求文本值使用单引号 sin...

  • 子查询

    子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query)...

  • Elasticsearch 基本查询详解

    查询(query &filter) query(查询):query对上下文检索(评分查询)不仅要查找匹配的文档,还...

  • mongodb查询(学习笔记二)

    查询 db.collection.find(query****, ****projection)query: 查询...

  • 文本查询程序

    //面向对象的核心是,抽象继承多态。抽象把数据实现隐藏,暴露公共接口继承和多态,派生类继承基类,降低代码重复性,通...

  • Elasticsearch 复合查询

    复合查询有:bool query(布尔查询)、boosting query(提高查询)、constant_scor...

网友评论

    本文标题:如何理解C++primer第15章的Query文本查询程序

    本文链接:https://www.haomeiwen.com/subject/aiwugxtx.html