C++候捷stl-视频笔记4

一个万用的hash function

在这里插入图片描述
哈希函数的形式,一种是一般函数(右边),一种是成员函数(左边),类的对象将成为函数对象
在这里插入图片描述
具体做法例子。直接把属性的所有hash值加起来,会在hashtable中会产生很多的碰撞,放在同一个bucket中的元素会多

另一种是使用可变模板参数来做的hash_val()函数,产生种子,经过复杂的操作,得到hash值。
版本1接受任意个数模版参数,版本2函数参数第一个是size_t(版本1产生的seed),重复调用版本2,直到剩一个模版参数,调用版本3
在这里插入图片描述
利用struct hash的偏特化来实现hash function
在这里插入图片描述
特化实现例子

Tuple用例

在这里插入图片描述
tuple用法示例
在这里插入图片描述
tuple<Head, Tail…> 继承 tuple<Tail…>
通过递归定义使得 tuple 类模板可以方便地处理可变数量的模板参数,每一层递归处理一个参数。这也是元编程中常见的技术,通过递归和继承来处理可变数量的参数。

type traits

在这里插入图片描述
默认的 __type_traits 进行了一系列泛化的设定
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
traits测试例子

type traits实现

is_void
在这里插入图片描述

// 通过范围偏特化实现remove const
template <typename _Tp>
struct remove_const
{ typedef _Tp type };
template <typename _Tp>
struct remove_const<_Tp const>
{ typedef _Tp type };
// remove volatile 同理

is_integral
在这里插入图片描述

cout

在这里插入图片描述
各种类对<<操作符的重载,以实现在标准输出设备上输出
在这里插入图片描述

movable元素对于不同容器速度效能的影响

在这里插入图片描述
由于vector的底层会两倍空间扩展,在扩展的时候会调用拷贝构造,所以这里调用次数为7194303,明显大于三百万
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
内存实际非连续的容器影响不大
在这里插入图片描述
在这里插入图片描述
move操作就是"浅拷贝",用新指针指向数据,打断旧指针

在这里插入图片描述
在这里插入图片描述
对于 vector 这样的容器,其用 move 就只是 swap 了三根指针
在这里插入图片描述
string带有movable的功能,从&&右值可以看出

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值