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

? ? 這篇文章是本人在學(xué)習(xí)C++primer第15章Query程序時對自己所遇到困惑的總結(jié),我發(fā)現(xiàn)其實這節(jié)最難理解的正如書中所說是理解這個程序的設(shè)計思路。因此本文也主要是記錄本人如何理解這個程序的設(shè)計思路的贴唇。

????要理解這一章的文本查詢程序應(yīng)回顧下12.3.2中的TextQuery類,該類還是比較容易理解,就不在此贅述瞪讼。15.9.1節(jié)首先講了為什么不直接繼承12.3.2節(jié)的TextQuery類,來實現(xiàn)不同類型的查詢粹断。書中舉的例子就是如果用這種方法的話符欠,要實現(xiàn)邏輯非查詢,就必須要知道除了待查詢的單詞之外的所有單詞瓶埋,然而這一般是不可能的希柿。所以才設(shè)計出一套獨立的繼承體系:

其中每個類都將包含eval和rep兩種方法。其中eval函數(shù)接收一個TextQuery用于保存文本和所有單詞及其出現(xiàn)的行的集合养筒,返回一個包含特定單詞及其出現(xiàn)行的QueryResult類曾撤。為什么要有這個函數(shù)也是比較好理解的,因為無非輸入是所有內(nèi)容晕粪,而輸出是一種經(jīng)過處理的特殊內(nèi)容挤悉。

? ? 下面開始設(shè)計這個程序。首先要明確需求巫湘,即最終代碼應(yīng)該要能實現(xiàn)如下形式的查詢:查詢形式

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

TextQuery tQuery(file);

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

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

這是我從Github上一份已經(jīng)設(shè)計好的程序中拷貝過來的測試主程序装悲,看到這種查詢方式,對我們理解這一節(jié)有非常大的幫助(書中只給了第三句尚氛,非常不方便我們理解這套程序)诀诊。如果我們把這個作為一個需求,就不難理解書中為什么要隱藏之前想要設(shè)計的那一套繼承體系的類阅嘶。因為我們并不想用戶去使用各種不同的類來實現(xiàn)不同形式的查詢畏梆,如果只用一個Query類來實現(xiàn)不是最好的嗎?

? ? Query q的目的是構(gòu)造一張圖:

而q.eval(tQuery)就是沿著這張圖進(jìn)行求值(顯示)的過程奈懒。這樣我們就很容易理解為什么要給Query設(shè)計eval和rep操作奠涌。q = Query("fiery")的含義是q綁定到一個存放著string的新WordQuery對象上。對于重載運算符應(yīng)該需要完成的任務(wù)磷杏,例如AndQuery就應(yīng)該是保存兩個Query對象溜畅,其他類似。

? ? 如果理解了以上內(nèi)容再去看書中的內(nèi)容的話极祸,就容易很多了慈格。

?待更:如何構(gòu)建這張圖怠晴,以及如何沿著這張圖求值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浴捆,一起剝皮案震驚了整個濱河市蒜田,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌选泻,老刑警劉巖冲粤,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異页眯,居然都是意外死亡梯捕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門窝撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傀顾,“玉大人,你說我怎么就攤上這事碌奉《淘” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵赐劣,是天一觀的道長错英。 經(jīng)常有香客問我,道長隆豹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任茅逮,我火速辦了婚禮璃赡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘献雅。我一直安慰自己碉考,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布挺身。 她就那樣靜靜地躺著侯谁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪章钾。 梳的紋絲不亂的頭發(fā)上墙贱,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音贱傀,去河邊找鬼惨撇。 笑死,一個胖子當(dāng)著我的面吹牛府寒,可吹牛的內(nèi)容都是我干的魁衙。 我是一名探鬼主播报腔,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剖淀!你這毒婦竟也來了纯蛾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纵隔,失蹤者是張志新(化名)和其女友劉穎翻诉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巨朦,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡米丘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糊啡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拄查。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棚蓄,靈堂內(nèi)的尸體忽然破棺而出堕扶,到底是詐尸還是另有隱情,我是刑警寧澤梭依,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布稍算,位于F島的核電站,受9級特大地震影響役拴,放射性物質(zhì)發(fā)生泄漏糊探。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一河闰、第九天 我趴在偏房一處隱蔽的房頂上張望科平。 院中可真熱鬧,春花似錦姜性、人聲如沸瞪慧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弃酌。三九已至,卻和暖如春儡炼,著一層夾襖步出監(jiān)牢的瞬間妓湘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工乌询, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留多柑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓楣责,卻偏偏與公主長得像竣灌,于是被迫代替她去往敵國和親聂沙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容