zoukankan      html  css  js  c++  java
  • 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放在一个链表中,以此来解决冲突。

  • 相关阅读:
    noi2002银河英雄传说(并查集)
    Ural1076(km算法)
    km算法的个人理解
    函数之装饰器
    函数进阶(一)
    python全栈测试题(一)
    python基础之循环语句
    字符串方法总结
    python基础3
    python基础2
  • 原文地址:https://www.cnblogs.com/hustdc/p/6486279.html
Copyright © 2011-2022 走看看