c primer CH15 文字布林查詢程式

2021-08-07 07:50:33 字數 1850 閱讀 3530

參考理解了下,實現上有不同。

最開始僅是查詢某個單詞所在的行數。

文字儲存到記憶體,選擇vector

map資料結構儲存查詢結果 map

真正的物件導向,類關係:

query_base

wordquery

notquery

binaryquery

andquery

orquery

wordquery解決單個查詢

query隱藏繼承細節,核心成員是乙個指向基類的base指標.

核心思想就是封裝基類指標!,然後靈活的呼叫下面的函式.

queryresult eval(textquery & t);

問題最後抽象成為乙個布林查詢表示式:

query q = ~(query("good") | (query("boy") & query("girl")));

queryresult r= q.eval(textquery("***.file");

本質上就是虛函式裡再呼叫虛函式,形成層次, 最外層的優先順序最低(~),括號擴起來的優先級別最高(&).

q.eval –>notquery::eval notquery裡的基類指標,指向了乙個orquery

orquery::eval, 含有兩個指標,乙個指向wordquery,乙個指向andquery,

因此分別呼叫了wordquery::eval和andquery::eval

wordquery::eval 檢查單詞「good」

andquery::eval 又含2個指標(query物件),指向2個wordquery

wordquery::eval 檢查單詞「boy」

wordquery::eval 檢查單詞「girl」

繼續做andquery::eval的and動作

繼續做orquery::eval的or動作

繼續做notquery::eval未完成的not動作

例如 query | query: 操作返回乙個query, 用派生類的指標構造。

friendly query operator|(const query a, const query b)

//這裡是隱式轉換,呼叫下面的轉換建構函式

query(query * ptr) : base(ptr) {}

orquery派生自binaryquery,因此派生類的構造又是呼叫了基類的建構函式

orquery(query a, query b) : binaryquery(a,b,"|") {}
binary將a,b,儲存到自己的成員變數query left和query right中。

在建立表示式的query時,相當於query* base = new orquery(…);需要手動釋放,用智慧型指標解決手動釋放的問題。

另外定義乙個類為share_ptr和直接定義乙個物件 使用上其實並沒有區別,

shared_ptr ptrc;

class * c;

class c;

區別在:

1 記憶體維護上,ptrc可以自動管理記憶體釋放,指標分配的記憶體需要delete,普通物件跟隨生命週期自動析構

2 資源上,物件賦值時發生拷貝,shared_ptr和指標共享;

3 生命週期share_ptr取決引用值,指標delete,而且必須在定義他的類物件結束之前,

普通物件跟隨定義他的類的生命週期

5文字溢位

文字溢位 overflow visible 預設值 hidden 超出隱藏 scroll 顯示滾動條 auto 自適應檢視 inherit 繼承父元素overflow值文字換行 white space normal 預設值 pre 原格式輸出,空白會被瀏覽器保留 pre wrap 文字不會換行,文字...

336 文字壓縮

中文english 給你乙個只含有可見字元 ascii 碼範圍 3232 至 126126 文字檔案,檔案中可能出現一些重複的單詞,你需要對它們進行壓縮。壓縮規則如下 如果原檔案中的字元不是英文本元,那麼保留這些字元。我們將連續的英文本元視為乙個單詞,單詞的前後不應該還有其它的英文本元。輸入 ple...

The HTML Language 二 文字標誌

後面的標誌 對 未經特別說明,均用在 之間1.標誌對是用來建立乙個段落 段與段之間空一行 在此標誌對之間加入的文字將按照段落的格式顯示在瀏覽器上 標誌還可以使用 align 屬性,它用來說明對齊方式 格式 left 左對齊center 居中right 右對齊2.是乙個很簡單的標誌,它沒有結束標誌,它...