Boolan泛型编程第五周笔记

一.一个万用的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用例

元之组合,数之组合。使用方法如下:


Boolan泛型编程第五周笔记_第1张图片

通过继承的方法来不断地剔除第一个参数,最终来实现对每一个元素的操作。

三、Type traits

用traits来实现类型的筛选,回答class中的默认构造、拷贝构造、拷贝赋值、析构函数重要不重要,是否是POD等,为算法服务。

对于自定义的类型,可以自己定义type traits的特化版本。

1)is_void类模板,


Boolan泛型编程第五周笔记_第2张图片

继承自_is_void_helper类模板,先把const、volatile属性拿掉,再传给__is_void_helper,利用它的泛化和特化void,判断是否是void;

2)is_integral类模板,


Boolan泛型编程第五周笔记_第3张图片

也是先把const、volatile属性拿掉,再利用__is_integral_helper的泛化和偏特化判断,如果不是和某种特化版本匹配的类型,那么就会使用泛化版本,泛化版本的回答是false;

四、cout

cout是一个iostream类的对象,它有一个成员运算符函数operator<<,每次调用的时候就会向输出设备输出内容;相当于重载了<<。

五、moveable

1、对vector的影响

2、对list影响

3、对deque影响

4、对multiset影响

5、对unordered_multiset影响

使用move虽无法减少拷贝的次数,但是可以提高拷贝构造的效率;

你可能感兴趣的:(Boolan泛型编程第五周笔记)