• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

vector, list, map等容器使用场合是什么

vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访问的场景。map主要用于资料一对一映射的情况,map内部自建一棵红黑树,这棵树具有对数据自动排序的功能。

一、vector, list, map等容器使用场合

vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访问的场景。map主要用于资料一对一映射的情况,map内部自建一棵红黑树,这棵树具有对数据自动排序的功能。以在map内部所有的数据都是有序的。比如一个班级中,每个学生的学号跟他的姓名就存在着一对一映射的关系。

  • list
  1. 封装链表,以链表形式实现,不支持[]运算符。
  2. 对随机访问的速度很慢(需要遍历整个链表),插入数据很快(不需要拷贝和移动数据,只需改变指针的指向)。
  3. 新添加的元素,list可以任意加入。
  • vector
  1. 封装数组,使用连续内存存储,支持[]运算符。
  2. 对随机访问的速度很快,对头插元素速度很慢,尾插元素速度很快
  3. 新添加的元素,vector有一套算法。
  • map
  1. 采用平衡检索二叉树:红黑树
  2. 存储结构为键值对<key,value>

延伸阅读:

二、vector的内存管理与效率

当元素需要插入且容器的容量不足时会发生重新分配。这会导致vector的原始内存分配和回收、对象的拷贝和析构和迭代器、指针和引用的失效。
问题产生的原因:vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存(一般是当前大小的1.5~2倍的新内存区),并把现有容器中的元素逐个复制过去,同时销毁旧的内存。
问题解决方法
提前使用reserve()函数设定容器大小,在vector操作的末尾添加vector<int>().swap(v)来修正过剩的空间或内存。

相关文章