C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合

map是关联式的,vector、list、deque是序列式的。

map:底层机制RB-tree(红黑树),元素自动排序,键值对。

vector:操作方式与array相似,动态空间增长。是连续性空间,支持随机访问。

优点:

? 内存动态增长,不需要指定内存大小。

? 支持随机访问,即支持[]和vector.at()。

缺点:

? 在内部进行插入删除操作效率低。

? 只能在vector的最后进行push和pop。

list:对空间的运用有绝对的精准,一点也不浪费。删除插入简单,但不支持随机访问。双向线性列表。

优点:

? 方便插入和删除。

? 可在两端push、pop。

缺点:不能随机访问。

deque:双向开口的连续性空间。头尾两端分别做元素的插入和删除。

优点:

? 随机访问。

? 方便插入和删除。

? 可在两端push、pop。

缺点:内部实现复杂,效率较低。排序等不适用。

使用场合总结:

? 需要高效的存取,不在于插入和删除效率,使用vector。

? 需要大量插入和删除,不关心存取,使用list。

? 关心存取,且两端数据进行插入和删除,使用deque。

? 键值对,一对一映射,采用map。

时间: 2024-11-07 02:40:23

C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合的相关文章

嵌入式系统 Boot Loader 技术内幕----仅此一篇读懂bootloader

嵌入式系统 Boot Loader 技术内幕----仅此一篇读懂bootloader 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念.软件设计的主要任务以及结构框架等内容. 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分. 2. Li

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste

10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本之前Cocos2d-x 引擎为我们提供了 CCArray. CCDictionary 等 Objective-C 风格的容器: 使用 Cocos2d-x 容器的一个重要原因在于 Cocos2d-x 的内存管理. 一般来说,被存入容器的对象在移除之前都应该保证是有效的, 但值得注意的是,在v3.0 beta版本中加入了数据结

C++技术问题总结-第0篇

从今天开始,对C++常用技术做个总结. 参考书籍:<C++Primer>.<C++对象模型>.<设计模式>.<Windows核心编程>.<STL解密>. 1. static_cast等四个cast的具体意义 C++类型转换:隐式转换和显式转换. 显式转换:static_cast.dynamic_cast.reinterpret_cast.const_cast. 1.1. static_cast 用法:static_cast<type-id&

[转]有哪些值得关注的技术博客(Java篇)

有哪些值得关注的技术博客(Java篇) 大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1.总结知识点相对比较全面 2.一般来说讲解知识点通俗易懂 3.路线比较清晰,不会有太多的冗余内容. 这样一来,对于自学的朋友来说,一些专业的博客不但大量的缩减了你得学习时间.提高了学习效率.更重要的是这些博客能培养你对编程的兴趣. 于是,这几期文章会主要推荐一些技术博客,目前计划打算主要分为: (已完) 

Java图像处理最快技术:ImageJ 学习第一篇

ImageJ是世界上最快的纯Java的图像处理程序.它可以过滤一个2048x2048的图像在0.1秒内(*).这是每秒40万像素!ImageJ的扩展通过使用内置的文本编辑器和Java编译器的ImageJ的开发插件.500多插件可用. 数据类型:8位灰度或索引色,16位无符号整数,32位浮点和RGB色彩. 文件格式:读写所有支持的数据类型为TIFF(非压缩)或原始数据.打开和保存GIF,JPEG,BMP,PNG,PGM,FITS和ASCII.打开DICOM.使用URL打开的TIFF.GIF文件.J

[原创] 软件自动化测试技术(1) - 准备篇

软件自动化测试技术(1) - 准备篇 想清楚 1. 为什么要做自动化测试? 有前途? 有钱途? 大家都在做? 有危机感? 过去做的很没意思,想换换? 2. 我的兴趣点在哪里? 对当前工作没有任何兴趣? 对点鼠标感兴趣? 对测试手工感兴趣? 对写代码感兴趣? 对各种新的技术感兴趣? 3. 我适合做自动化吗? 我不懂技术? 我对学习工具感到恐惧? 我觉得手工的系统/验收测试能发现更多的缺陷,而这正是我的成就感所在? 4. 做了自动化我能怎么样? 有钱了? 高大上了? 可以跳槽去Google.Face

C++技术问题总结-第2篇 进程通信

进程通信的方法 进程通信基本方法有如下几种. 1.消息传递机制. 2.共享内存. 3.管道和邮槽. 4.剪贴板. 5.Socket通信. 1.消息传递机制 使用WM_COPYDATA实现进程间的传递数据. 函数原型 LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam) 参数 hWnd:其窗口程序将接收消息的窗口的句柄.如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非

C++技术问题总结-第3篇 线程同步

线程同步的方法 线程同步有多种方法. 用户模式下的线程同步:关键段(critcal section). 内核模式下的线程同步:事件.计时器.信号量.互斥量. 1.关键段 用户模式下的同步,主要API如下. InitializeCriticalSection.DeleteCriticalSection.EnterCriticalSection.LeaveCriticalSection. 2.事件 常用于:一个线程初始化工作,然后再触发另一个线程让它工作.主要API如下. CreateEvent.S