第十六章 16 5節練習

2021-06-25 22:18:57 字數 1251 閱讀 7453

練習16.62

定義你自己版本的hash,並定義乙個sales_data物件的unordered_multiset。將多條交易記錄儲存到容器中, 並列印其內容。

解答:這個參考書中的實現吧。

練習16.63

定義乙個函式模板,統計乙個給定值在乙個vector中出現的次數。測試你的函式,分別傳遞給它乙個double的vector,乙個int的vector以及乙個string的vector。

解答:

#include #include #include #include #define debug 0

namespace test

}int main();

std::vectorivec;

std::vectorsvec;

}

練習16.64

為上一題中的模板編寫特例化版本來處理vector。編寫程式使用這個特例化版本。

解答:

template<>

int count(const std::vector&vec, const char* const &val)

在上一題的基礎上新增如上語句,再新增測試例即可。

練習16.65

在16.3節(第617頁)中我們定義了兩個過載的debug_rep版本,乙個接受const char*引數,另乙個接受char*引數。將這兩個函式重寫為特例化版本。

解答:

template<>

string debug_rep(const char* const& s)

template<>

string debug_rep(char* const &s)

練習16.66

過載debug_rep函式與特例化相比,有何優點和缺點?

解答:對於這個理解,我用特例化的次數也不是很多,這裡也不能從經驗上說些什麼了。

引用書中的一段話

【引用】兩個函式具有相同個的引數列表,因此顯然兩者提供同樣好的匹配。但是編譯器會選擇非模板版本。當存在多個同樣好的函式模板時,編譯器選擇最特例化的版本,除與相同的原因,乙個費末班函式比乙個函式模板更好。

【引用】對於乙個呼叫,如果乙個非函式模板與乙個函式模板提供同樣好的匹配,則選擇非模板版本。

練習16.67

定義特例化版本會影響debug_rep的函式匹配麼?如果不影響,為什麼?

解答:乙個特例化版本的本質是乙個例項,而非函式的過載。因此,特例化不影響函式匹配。

第十六章 16 1 1節練習

練習16.1 給出例項化的定義。解答 例項化,就是編譯器將乙個函式模板中的型別用乙個具體型別替換的過程。練習16.2 編寫並測試你自己版本的compare函式。解答 這個函式模板的實現,可以參考書中的實現。不過這裡要注意的是,當你的實現中涉及到比較運算子的時候,需要確定你使用的型別支援比較運算子。練...

第十六章 16 2 1節練習

練習16.32 在模板實參推斷過程中發生了什麼?解答 引用 在模板實參推斷過程中改變一起使用函式呼叫中的實參型別來尋找模板實參,用這些模板實參生成的函式版本與給定的函式呼叫最為匹配。練習16.33 指出在模板實參推斷過程中允許對函式實參進行的兩種型別轉換。解答 1.const轉換,可以將乙個非con...

第十六章 16 4 3節練習

練習16.58 為你的strvec類及你為16.1.2節 第591頁 練習中編寫的vec類新增emplace back函式。解答 這個參考623頁的strvec中的emplace back實現即可。練習16.59 假定s是乙個string,解釋呼叫svec.emplace back s 會發生什麼。...