码农知识堂 - 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 好
  • 相关阅读:
    ubuntu源码安装aria2
    MySQL导入/导出数据
    20-Redis哨兵和高可用、一致性Hash和ES的简单介绍
    HP OfficeJet Pro 8020 如何更换碳粉盒
    Win11如何设置用户权限?Win11设置用户权限的方法
    Dockerfile架设LNMP
    游戏开发年度报告 | 2023年游戏开发团队最流行的制作和发行的方式
    产品需求交付质量保证的“七重门”
    字节内部的算法图册被LeetCode抢先开源,竟导致大厂通过率飙升
    【利用AI让知识体系化】5种创建型模式
  • 原文地址:https://blog.csdn.net/m0_67470729/article/details/133721585
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号