DEV Community

Ariston
Ariston

Posted on • Edited on

分析TextQuery的源码

首先我们看下各个文件中的成员变量和成员函数都是做什么的。可以针对这个画一个类图。

get_print

一共三个函数get_file、get_word还有get_words。

get_file

这个函数,就是判断一下可执行程序后面的参数对不对,然后把文件传给TextQuery这个类进行进一步处理。

get_word

输入一个词,如果是q的话退出

get_words

输入两个词,如果第一个词是q的话退出,如果第一个词不是q的话再出入第二个词。

TextQuery

变量部分:

首先一个行号,

vector<string>::size_type //这个用于表示行号,这个东西本质上适用于表示vector里面有多少元素,无论vector有多少元素都可以表示其大小
TextQuery(std::ifstream &);//传入一个文件输入流
QueryResult query(const std::string&) const;//查词的函数
void display_map(); //打印wm
std::shared_ptr<std::vector<std::string> > file;
/*用于管理整个文本,那么至于为什么一定要用sptr呢?如果我们的
TextQuery进行复制,那么一篇文档就会走拷贝构造函数,进行大量的资源浪费,但是如果是sptr,我们就只需要增加引用计数就ok。*/
std::map<std::string, std::shared_ptr<std::set<line_no> > > wm;  
/*存放每一个词所对应的行号,至于为什么行号要用sptr包起来?因为一个单词可能出现相同的行号,如果相同的单词出现相同的行号,那么在内存中会造成大量的浪费*/
static std::string cleanup_str(const std::string&);/*把字符串转换为小写并且没有标点符号的,统一大小写有利于快速处理,至于为什么是静态的,因为该函数不需要访问任何成员变量*/
Enter fullscreen mode Exit fullscreen mode

Query

这个里面有各种查询

Top comments (0)