• STL容器


    1 迭代器

    1.1 迭代器不是指针

    1.2 迭代器在概念上类似指针

    它可以做加减法,它可以用*取指向的对象,但是它只能够用于操作容器。

    1.3 迭代器的使用

    迭代器有begin()和end()函数(指向最后一个元素的下一个函数),这提供了遍历的范围,然后加上加减法,就可以遍历了。

    1.4 迭代器可以让容器和算法分开,然后通过它把这二者粘合在一起。

    2 可以遍历的容器

    vector、deque、list、set、hash_set、map、hash_map

    3  不支持遍历的容器

    stack、queue、priority_queue,这个是由该数据结构的概念定义的。

    4 各个容器底层的实现

    4.1 vector

    用数组实现的,就是一块连续的内存区域,这个块内存区域分配之后地址保存在vector对象的start和finish成员中。所有的都可以在这个上面思考就可以了。

    4.2 list

    list是用链表实现的,并且是双向链表,所有的都可以在这个上面去思考。

    4.3 deque

    是分段连续的内存区域构成,它的两端进行操作是常数时间,但是随机访问却和vector不是一样的,它需要用index查一个map,找到所在的连续字段,然后再random access。

    4.4 stack、queue

    底层数据结构是deque

    4.5 priority queue

    底层数据结构是vector,priority queue的内部是一个heap,这样非常好取最大的元素,并且插入之后,能够迅速恢复到堆序,而用vector很容易实现一棵二叉树的堆。

    4.6 slist

    single direction list。

    4.7 set

    set就是元素的集合,不是键值对,键值对是map。set中的元素不允许相同。为了可以从一个set中快速查找一个元素,set底层的数据结构用的是红黑树。

    4.8 map

    map的元素是键值对,不允许有两个相同的key。底层也是红黑树。

    4.9 mutiset

    允许相同元素,底层是红黑树。

    4.10 multimap

    允许有相同的key,底层是红黑树。

    4.10 hash_set

    底层的数据结构使用的是hash table的set。

    4.11 hash_map

    底层的数据结构使用的是hash table的map。

    5 STL中所使用的hash table

    首先是一个指针数组,指针数组是vector,通过hash函数,找到vector中的一个bin,这个bin是一个链表。

    也就是说,它会把所有冲突了的key的node放在一个链表中,以此来解决冲突。

  • 相关阅读:
    git使用代理
    反汇编一个c程序
    Berkeley套接字
    ubuntu 升级
    ubuntu备份与还原
    struct socket 结构详解
    How sockets work
    wget中文乱码问题
    ubuntu配置开机启动服务
    《javascript设计模式》笔记之第五章:单体模式
  • 原文地址:https://www.cnblogs.com/hustdc/p/6486279.html
Copyright © 2020-2023  润新知