第十一章 11 3 6節練習

2021-06-25 08:56:13 字數 1230 閱讀 6045

練習11.33

實現你自己版本的單詞轉換程式。

解答:

#include #include #include #include #include using namespace std;

mapbuildmap(ifstream &map_file)

else

} return trans_map;

}const string& transform(const string &s, const map&m)

else

}void word_transform(ifstream &map_file, ifstream &input)

else

// transform返回它的第乙個引數或其轉換之後的形式

cout << transform(word, trans_map); // 列印輸出

} cout << endl; }}

int main()

這裡還是將書上的程式組合在了一起。

作為primer的學習資料,這裡需要去單步除錯來了解整個程式的執行流程。

而非再去寫乙個。當然,在時間允許的情況下,可以配合著系統的api將這個程式進行重寫。

練習11.34

如果你將transform函式中的find替換為下標運算子,會發生什麼情況?

解答:不能直接進行替換,這裡find是返回乙個pair迭代器,而下標運算子則會返回乙個string的值。

如果要改的話,下面的if語句也要對應的換成有equal_range的for迴圈語句。

練習11.35

在buildmap中,如果進行如下改寫會有什麼效果?

trans_map[key] = value.substr(1);

改為trans_map.insert();

解答:根據11.3.2節學到的內容來判斷,這裡的替換操作應為等價操作。

練習11.36

我們的程式沒有檢查輸入檔案的合法性。特別是,它假定轉換規則檔案中的規則都是有意義的。如果檔案中的某一行包含乙個關鍵字、乙個空格,然後就結束了,會發生什麼?

**程式的行為並進行驗證,再與你的程式進行比較。

解答:不會對其他規則和文字翻譯有影響。

空行不會包含在替換key中;當只有乙個關鍵字的時候key對應的值是空的,也就是不會進行轉換。

所以,規則檔案的魯棒性在這裡還是挺高的。

我比較擔心字符集的問題,當不同的字元在這裡出現的時候,程式也許會出現問題。

第十一章 11 2 3節練習

練習11.12 編寫程式,讀入string和int的序列,將每個string和int存入乙個pair中,pair儲存在乙個vector中。解答 include include include include include using namespace std int main auto sfir...

第十一章 11 3 5節練習

練習11.27 對於什麼問題你會用count來解決?什麼時候你又會選擇find呢?解答 引用 應該使用哪個操作依賴與我們要解決什麼問題。如果我們所關心的只不過是乙個特定元素是否已在容器中,可能find是最佳的選擇。對於不允許重複關鍵字的容器,可能使用find還是count沒有什麼區別。但對於允許重複...

第十一章 11 4節練習

練習11.37 乙個無序容器與其有序容器版本相比有何優勢?有序版本有何優勢?解答 在關鍵字型別的元素沒有明顯的有序關係的情況下,無序容器是非常有用的。在某些應用中,維護元素的序代價非常高昂,此事無需容器也很有用。雖然理論上雜湊技術能獲得更好的平均效能,但在實際中想要達到很好的效果還需要進行一些效能測...