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

cpp 复制代码
// 通过范围偏特化实现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的功能,从&&右值可以看出

相关推荐
GIS小小研究僧21 分钟前
PostGIS笔记:PostgreSQL 数据库与用户 基础操作
数据库·笔记·postgresql
半个番茄1 小时前
C 或 C++ 中用于表示常量的后缀:1ULL
c语言·开发语言·c++
玉带湖水位记录员2 小时前
状态模式——C++实现
开发语言·c++·状态模式
王磊鑫4 小时前
计算机组成原理(2)王道学习笔记
笔记·学习
汉克老师4 小时前
GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)
c++·学习·算法·游戏·动态规划·gesp6级
闻缺陷则喜何志丹4 小时前
【C++图论】2685. 统计完全连通分量的数量|1769
c++·算法·力扣·图论·数量·完全·连通分量
利刃大大4 小时前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
Mryan20055 小时前
LeetCode | 不同路径
数据结构·c++·算法·leetcode
东京老树根5 小时前
Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)
笔记·学习·excel
SummerGao.5 小时前
springboot 调用 c++生成的so库文件
java·c++·.so