码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C++】SLT 六大组件之一:容器总结


    文章目录

    • 🔺🔺🔺
      • 1. map / set
        • 1.1 常见接口的使用
        • 1.2 经典问题
          • operator[] 的返回值是什么?
          • 底层实现原理是什么?
          • 一个类型要做 map 和 set 的 K 有什么要求?
          • map 和 set 有什么特点?
        • 1.3 multi 版本的特点
      • 2. unordered_map / unordered_set(C++11)
        • 2.1 常见接口的使用
        • 2.2 经典问题
          • 底层实现原理是什么?
          • 一个类型要做 unordered_map 和 unordered_set 的 K 有什么要求?
          • unordered_xxx 和 map/set 相比有什么特点?
      • 3. vector / list
        • 3.1 常见接口的使用
        • 3.2 常见问题
          • vector 和 list 的比较?
          • vector 扩容是怎么扩的?
    • 🔺🔺
      • 4. string 常见接口的使用
      • 5. stack / queue 常见接口的使用
      • 6. priority_queue 常见接口的使用
      • 7. bitset 常见接口的使用
    • 🔺
      • 8. array(C++11)
      • 9. forward_list(C++11)
      • 10. deque

    –
    容器分类:

    • 序列式容器:有顺序如 vector
    • 关联式容器:有关联如 map、set

    🔺🔺🔺

    1. map / set


    1.1 常见接口的使用

    • insert
    • erase
    • find
    • map 的 operator[]
    • iterator

    1.2 经典问题

    operator[] 的返回值是什么?

    value 的引用

    底层实现原理是什么?
    • 红黑树:
      • 规则
      • 增删查改的效率
    一个类型要做 map 和 set 的 K 有什么要求?
    • 支持比较大小,因为底层是搜索树
    map 和 set 有什么特点?
    • 查找的效率为 O(logN)
    • 遍历是按照 key 排序的,且可以对 key 去重

    1.3 multi 版本的特点

    • 允许键值冗余

    2. unordered_map / unordered_set(C++11)

    2.1 常见接口的使用

    • insert
    • erase
    • find
    • unordered_map 的 operator[]
    • iterator

    2.2 经典问题

    底层实现原理是什么?
    • 哈希表:
      • 规则
      • 增删查改的效率
    一个类型要做 unordered_map 和 unordered_set 的 K 有什么要求?
    • 能取模或者配一个哈希的仿函数支持转化成整型取模
    • 支持 == 比较
    unordered_xxx 和 map/set 相比有什么特点?
    • 更快,查找的效率平均为 O(1)
    • 遍历是无序的,也可以对 key 去重

    3. vector / list


    3.1 常见接口的使用

    vector:

    • push_back / pop_back
    • []
    • reserve :只开空间,不能用 [],因为 [] 会检查未初始化数据
      resize :开空间 + 初始化,使用后,可以用 [] 访问进行修改
    • insert / erase
    • iterator

    3.2 常见问题

    vector 和 list 的比较?
    • vector 的优点:

      • 适合尾插尾删
      • 支持通过下标随机访问
      • 因为是连续的物理空间,cpu 高速缓存访问,命中率会更高
    • vector 的缺点:

      • 头部中间插入需要挪动数据,效率比较低
      • 扩容需要代价
    • list 的优点:

      • 任意位置 O(1) 的插入删除
      • 按需申请释放

    -list 的缺点

    • 不支持随机访问
    • list 可能造成内存碎片的问题,不过 空间配置器 可以一定程度上解决
    vector 扩容是怎么扩的?
    • 一般是 2 倍扩容,但是不是一定,和编译器有关(g++ 2倍,vs 1.5倍)
      • 至于为什么是 2 倍左右?合适呗,一次扩多了浪费,一次扩少了效率低
    • C++11 之前 使用的是 拷贝构造
    • C++11 之后 使用的是 移动构造

    🔺🔺

    4. string 常见接口的使用

    • +=
    • find
    • insert / erase
    • []
    • iterator
    • c_str
    • sub_str
    • reserve
    • resize
    • to_string
    • stoi

    5. stack / queue 常见接口的使用

    • push / pop
    • top
    • front / back
    • empty / size

    6. priority_queue 常见接口的使用

    底层是 二叉树 的 堆

    • push / pop
    • top
    • empty / size

    7. bitset 常见接口的使用

    • set
    • reset
    • test

    🔺

    8. array(C++11)

    • 核心价值:相比 C 的静态数组,[] 绝对检查越界

    • 委员会期望代替静态数组,但实际效果不明显

    9. forward_list(C++11)

    • 使用场景:只头插头删,又想节省一点点空间

    • 相同场景下,比起 list 有一点点优势

    10. deque

    • 使用场景:头尾插入删除多,可能还需要一些下标的随机访问
    • 要注意的是,不要大量的下标随机访问,否则效率不如 vector 好
  • 相关阅读:
    Leetcode1462-课程表 IV
    AJAX 技术学习笔记(基础)
    pytorch下载离线包的网址
    有趣之matlab-烟花
    带有 Spring AOP 和自定义注解的 Java 观察者模式
    帧间预测单元划分流程
    TC8:SOMEIPSRV_BASIC_01-03
    QT中的JSON存储时无序问题的思考与解决
    react中设置activeClassName的笔记
    浅谈餐饮业油烟污染现状及在线监测系统的设计与应用
  • 原文地址:https://blog.csdn.net/m0_67470729/article/details/133721585
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号