1.C++11中的auto是怎么实现自动识别类型的?模板是怎样实现转化成不同类型的?

auto仅仅只是一个占位符,在编译期间它会被真正的类型替代,或者说C++中变量必须要有明确类型的,只是这个类型是由编译器自己推导出来的。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式具体类型函数的模具,所以模板其实就是将原本应该我们做重复的事情交给了编译器。

2.map和set的区别和底层实现是什么?map取值的 find,[],at方法的区别(at有越界检查功能)

都是红黑树,find查找需要判断返回的结果才知道有没有查询成功。[]不管有没有就是0,如果原先不存在该key,则插入,如果存在则覆盖插入,at方法则会进行越界检查,这会损失性能,如果存在则返回它的值,如果不存在则抛出异常。

3.红黑树

多路平衡搜索树

通过比较key的大小保持有序

通过key区分不同节点

O(1)找到最小和最大的节点

4.哈希表(散列表)

在某一个节点可能存在多个节点,通过拉链法 链表链接起来

hash运算:对key进行hash

负载因子:used/size 默认是0.7 描述哈希冲突的激烈程度 超过0.7需要进行扩容

扩缩容

rehash

另:通过key来区分不同节点