C++STL学习笔记 STL周边知识点

一、一个万用的Hash Function

1、形式1:函数形式

#include 

class Customer{
    // ...
};

size_t customer_hash_func(const Customer& c){

  //  return ...;
}

int main(){
    unordered_set custset(20,customer_hash_func);
}

2、形式2:类形式

#include 

class Customer{
    // ...
};

class CustomerHash{
public:
    std::size_t operator()(const Customer& c)const{
        //return ...;
    }
};

int main(){

    unordered_set custset;
}

源码实例

unordered_set底层容器使用的哈希表。

C++STL学习笔记 STL周边知识点_第1张图片

函数执行的顺序如下,

(1)首先进入main函数中,红色箭头所指的行,进入之后,会调用Customer的构造函数,即1;

(2)在执行hh(CustomerHash)的()重载运算符,即2;

(3)根据hash_val函数寻找其对应重载的函数,找到3;

(4)接下来执行4,4的函数里面是一个递归,会执行5;

(5)直到args里面的参数仅有一个的时候会执行6。

存在问题:

我创建unordered_set setx,但是调用setx.insert(Customer("ace","han",1));  会失败,有会的可以讨论一下怎么处理。

3、形式3:以struct hash偏特化形式实现Hash Function

C++STL学习笔记 STL周边知识点_第2张图片

二、Tuple(元组)

1、tuple的简单代码测试

C++STL学习笔记 STL周边知识点_第3张图片

2、Tuple节录并简化版本

C++STL学习笔记 STL周边知识点_第4张图片

3、tuple的继承关系

C++STL学习笔记 STL周边知识点_第5张图片

以tuple为例,tuple继承tuple,tuple继承于tuple,tuple继承于tuple<>。

三、type traits

1、用法

该头文件定义了一系列类,以获得有关编译时的类型信息。

头文件包含:

  • Helper类:帮助创建编译时常量的标准类。
  • 类型特征:以编译时常量值的形式获取类型特征的类。
  • 类型转换:类通过将特定的转换应用于现有类型来获取新类型。

类型的基本特征是可以对其进行分类的类别。这是有关这些类别如何重叠的图表:

C++STL学习笔记 STL周边知识点_第6张图片

C++STL学习笔记 STL周边知识点_第7张图片

C++11的type_traits

C++STL学习笔记 STL周边知识点_第8张图片

C++STL学习笔记 STL周边知识点_第9张图片

type_trais测试

C++STL学习笔记 STL周边知识点_第10张图片

C++STL学习笔记 STL周边知识点_第11张图片

在mian函数中添加

C++STL学习笔记 STL周边知识点_第12张图片

(1)int类型测试

C++STL学习笔记 STL周边知识点_第13张图片

(2)结构体类型测试

C++STL学习笔记 STL周边知识点_第14张图片

(3)类测试

C++STL学习笔记 STL周边知识点_第15张图片

C++STL学习笔记 STL周边知识点_第16张图片

2、type_traits实现is_void

C++STL学习笔记 STL周边知识点_第17张图片

3、type_traits实现is_integral

C++STL学习笔记 STL周边知识点_第18张图片

4、type_traits实现is_move_assignable

C++STL学习笔记 STL周边知识点_第19张图片

你可能感兴趣的:(C++,STL)