美文网首页
C++ 数据结构与算法

C++ 数据结构与算法

作者: _喝喝酒吹吹风_ | 来源:发表于2021-01-01 20:52 被阅读0次
    C++ 容器与算法
    • vector 容器: 动态数组,可动态扩容,扩容时重新开辟原有长度2倍的长度,然后将原有的数据拷贝过来。

      • push_back : O(1)
      • insert: O(N)
      • 查找: O(1)
      • pop_back:O(1)
      • erase:O(N)
    • list 容器:list 底层是一个双向链表,而且是一个环状双向链表

      • push_back : O(1)
      • push_front:O(1)
      • insert: O(1)
      • 查找: O(1)
      • pop_back:O(1)
      • pop_front:O(1)
      • erase:O(1)
    • deque 容器(双端队列):

      • push_back : O(1)
      • push_front:O(1)
      • insert: O(N)
      • 查找: O(1)
      • pop_back:O(1)
      • pop_front:O(1)
      • erase:O(N)

    STL之deque实现详解

    • deque 是按页或块来分配存储器的,每页包含固定数目的元素

    • 采用一块所谓的 map 作为主控。这里的 map 是一小块连续空间,其中每个元素都是指针,指向另一段连续线性空间

    • stack

      • SGI STL 便以 deque 作为缺省情况下的 stack 底部结构
    • queue (单端队列)

      • SGI STL 便以 deque 作为缺省情况下的 queue 底部结构
    • priority_queue
      深入PriorityQueue底层原理与源码解析

      • 一个以vector 表现的 complete binary tree.max-heap 实现
      • PriorityQueue是一个小顶堆;
      • PriorityQueue是非线程安全的;
      • PriorityQueue不是有序的,只有堆顶存储着最小的元素;
      • 入队就是堆的插入元素的实现;
      • 出队就是堆的删除元素的实现
      • 时间复杂度
        • insert: O(logN)
        • pop: O(1)
    • set 、 multiset、map、multmap
      红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(logN),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多,map,multimap,set,multiset底层实现都是红黑树。

      • multiset, multmap 和 set map实现一致,只是key一致的value 放在一个容器里(网上说是set 但我觉得list 更合适),

      • RB-Tree 红黑数实现

      • 插入: O(logN)

      • 查看:O(logN)

      • 删除:O(logN)

    • unordered_map: 就是hash_map,和java的HashMap实现一致

      • 插入:O(1),最坏情况O(N)。

        查看:O(1),最坏情况O(N)。

        删除:O(1),最坏情况O(N)。

    • RB-Tree :近似的平衡二叉树

    • B+树: 减少磁盘IO


    • 图解排序算法(三)之堆排序

      • 建堆:O(N)
      • 重建堆:O(NlogN)
    • STL里resize和reserve的区别:

      • resize扩充元素且以0赋值
      • reserve扩充容量
    • STL容器利用迭代器删除元素小结

      • 关联容器(如map, set, multimap, multiset):仅仅会使当前的iterator失效,只要在erase时,递增当前的iterator即可
      • 序列式容器(如vector,deque,list等):删除当前的iterator会使后面所有元素的iterator都失效,不过erase方法可以返回下一个有效的iterator
    • STL的allocator:标准库allocator类定义在头文件memory中,它帮助我们将内存分配和对象构造分离开来。它提供一种类型感知的内存分配方法,它分配的内存是原始的、未构造的。https://blog.csdn.net/fengbingchun/article/details/78943527

    • STL内存优化:https://blog.csdn.net/u010183728/article/details/81531392

    refrence

    数据结构与算法(C++)大纲
    关联式容器map,set,multimap,multidetset的底层实现

    相关文章

      网友评论

          本文标题:C++ 数据结构与算法

          本文链接:https://www.haomeiwen.com/subject/cfrjoktx.html