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