分析TextQuery的源码
Ariston
Posted on December 7, 2023
首先我们看下各个文件中的成员变量和成员函数都是做什么的。可以针对这个画一个类图。
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&);/*把字符串转换为小写并且没有标点符号的,统一大小写有利于快速处理,至于为什么是静态的,因为该函数不需要访问任何成员变量*/
Query
这个里面有各种查询
💖 💪 🙅 🚩
Ariston
Posted on December 7, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
githubcopilot AI Innovations at Microsoft Ignite 2024 What You Need to Know (Part 2)
November 29, 2024