vector, list, map等容器使用场合是什么?
一、vector, list, map等容器使用场合
vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访问的场景。map主要用于资料一对一映射的情况,map内部自建一棵红黑树,这棵树具有对数据自动排序的功能。以在map内部所有的数据都是有序的。比如一个班级中,每个学生的学号跟他的姓名就存在着一对一映射的关系。
list封装链表,以链表形式实现,不支持[]运算符。对随机访问的速度很慢(需要遍历整个链表),插入数据很快(不需要拷贝和移动数据,只需改变指针的指向)。新添加的元素,list可以任意加入。vector封装数组,使用连续内存存储,支持[]运算符。对随机访问的速度很快,对头插元素速度很慢,尾插元素速度很快新添加的元素,vector有一套算法。map采用平衡检索二叉树:红黑树存储结构为键值对延伸阅读:
二、vector的内存管理与效率
当元素需要插入且容器的容量不足时会发生重新分配。这会导致vector的原始内存分配和回收、对象的拷贝和析构和迭代器、指针和引用的失效。
问题产生的原因:vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存(一般是当前大小的1.5~2倍的新内存区),并把现有容器中的元素逐个复制过去,同时销毁旧的内存。
问题解决方法
提前使用reserve()函数设定容器大小,在vector操作的末尾添加vector

相关推荐HOT
更多>>
在 iPad 上运行 Windows 是什么体验?
一、在 iPad 上运行 Windows 是什么体验目前市面上有一些能够在 iPad 上运行 Windows 的应用程序,例如 Parallels Access、Splash较好、VMware ...详情>>
2023-10-14 19:14:27
vector, list, map等容器使用场合是什么?
一、vector, list, map等容器使用场合vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访...详情>>
2023-10-14 14:59:11
分库分表的数据库和分布式数据库有什么区别?
一、分库分表的数据库和分布式数据库有什么区别分库分表的数据库:没有这种数据库,所谓分库分表,这是开发应用的程序员通过自己的代码、或者底...详情>>
2023-10-14 13:59:18
APP定制开发的难点有哪些?
一、APP定制开发的难点1、多平台适配不同的移动平台(如iOS和Android)具有不同的操作系统、开发语言和开发工具。在进行APP定制开发时,需要适...详情>>
2023-10-14 12:57:35