zoukankan      html  css  js  c++  java
  • STL源码剖析学习记录(二)

    第五章 关联式容器

    1、红黑树

    operation: 左旋,右旋,变色, header实现技巧,平均查找时间复杂度nlog(n)

    set/map/multiset/multimap

    采用RB-tree红黑树实现;

    删除/插入新元素,不会导致迭代器失效;

    set/map不允许重复,multiset/multimap允许重复

    3)hash_table

    operation: hash function, vector<slist<key>>, vector作为buckets的容器。rehash遵循质数扩容

    线性探测(存在primary clustering问题)、二次探测(存在secondary clustering问题)、开链法

    维护一个指针数组,每一个指针代表一个链表(具有相同的hash值);

    在插入数据时,会插入到同一个hash桶中的相同键值的数据的next 指向

    当出现hashtable中元素个数达到阈值时(SGI是数组大小小于总元素个数时扩容),进行扩容(扩容大小为下一个质数),并将原来的数据rehash到新的表中(原来同一个桶中的数据,现在可能会hash到不同桶中,因此需要一个一个hash,这可能会导致同一个桶的数据出现翻转现象);

    注意针对double, float等未提供的 用户需要自定义hash function

    4)hash_set/hash_map/hash_multiset/hash_multimap

    采用hash_table实现;

    hash_set/hash_map不允许重复,hash_multiset/hash_multimap允许重复;

    map/multimap/unordered_map/ unordered_ multimap

     

    第六章 算法

    这章主要讲了一些stl对容器值的一些操作,比如sum, replace, fill等,主要分为inplace改变容器值和获取容器值 两类

    记录下copy()的操作:

    利用type traits和模板偏特化实现 对 可以进行memmove的char*, wchar_t*类别进行 最快的操作,对random_access_tag的类别进行对应copy_d操作,对其他类别进行对应的操作,已达到最优效率

     

    记录下Sort()的操作:

    插入排序STL实现:

    外循环依次遍历整个容器,内循环先判断last是否大于头元素,如果小于头元素则对整个区段向右位移,否则挨个查询插入点

    快速排序STL实现:

     

  • 相关阅读:
    SQL Server 分页SQL
    element-ui 表格可编辑添加删除
    vue+ element 动态换肤
    与大家分享学习微信小程序开发的一些心得
    Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础
    Python 内编写类的各种技巧和方法
    sqlmap-注入方法大全
    kali安装中文输入法完美解决
    kali渗透测试
    parrot-linux,kali-linux,安装输入法
  • 原文地址:https://www.cnblogs.com/ChrisInsistPy/p/13203837.html
Copyright © 2011-2022 走看看