一.一個萬用的Hash Fuction
三種形式:
1)設計成成員函數、
#include
class Customer{
//........
};
class CustomerHash
{
public:
std::size_t operator()(const Customer& c) const{
return /*........*/;
}
};
unordered_set customers;
2)設計成一般函數、
size_t customer_hash_func(const Customer& c)
{
return /*......*/;
}
3)以struct hash偏特化形式實現hash function。
class MyString
{
private:
char* _data;
size_t _len;
};
namespace std;
{
template<>
struct hash
{
size_t operatoe()(const MyString& s) const noexcept{
return hash()(string(s.get()));
}}}
二、Tuple用例
元之組合,數之組合。使用方法如下:
通過繼承的方法來不斷地剔除第一個參數,最終來實現對每一個元素的操作。
三、Type traits
用traits來實現類型的篩選,回答class中的默認構造、拷貝構造、拷貝賦值、析構函數重要不重要,是否是POD等,為算法服務。
對于自定義的類型,可以自己定義type traits的特化版本。
1)is_void類模板,
繼承自_is_void_helper類模板,先把const、volatile屬性拿掉,再傳給__is_void_helper,利用它的泛化和特化void,判斷是否是void;
2)is_integral類模板,
也是先把const、volatile屬性拿掉,再利用__is_integral_helper的泛化和偏特化判斷,如果不是和某種特化版本匹配的類型,那么就會使用泛化版本,泛化版本的回答是false;
四、cout
cout是一個iostream類的對象,它有一個成員運算符函數operator<<,每次調用的時候就會向輸出設備輸出內容;相當于重載了<<。
五、moveable
1、對vector的影響
2、對list影響
3、對deque影響
4、對multiset影響
5、對unordered_multiset影響
使用move雖無法減少拷貝的次數,但是可以提高拷貝構造的效率;