如何选择STL容器?
大家知道,c++的STL标准库很好用,里面的vector,list,deque,stack,slist,set,map,都很好用。但是,在实际编程过程中,如何根据自己的项目需求选择里面的一种容器呢?
最好的办法就是了解其中的原理,然后做选择。(补充,如果项目中不考虑效率,就不用考虑那么多了~毕竟STL从头到尾都考虑了效率问题。)
vector
vector的基本原理如下:
它采用线性空间存储数据。如果空间不够,则另外分配新的两倍大小的空间,然后把旧空间释放掉。
可以看出:
①vector不适合push_front(效率很低)
②vector不适合中间插入删除操作。中间插入删除操作会引起内存拷贝。
list
list的原理如下:
list采用非线性的空间存储数据。
①list适合插入删除频繁的场所。不管插入还是删除,时间基本上都是常数。
②list不适合随机线性访问。
deque
deque基本原理:
deque采用类似文件系统的方式存储数据。其中有数个连续空间的缓冲区存储数据。这些缓冲区连接起来,给上层用户一个假象就是,存储的数据空间是连续的。
deque是list和vector的折中方案。兼有list的优点,也有vector随机线性访问效率高的优点。
①deque仍旧不适合中间插入删除操作。
②deque适合线性随机访问数据。
stack
stack是deque的一种变种,优缺点不变。
queue(队列)
queue是deque的一种变种,优缺点不变。
heap
heap的实现原理如图:
heap容器采用二叉树存储数据。所以heap容器适合经常排序的场所。heap容器里的数据是自动排序的~
如何选择STL容器?相关推荐
- 标准非STL容器 : bitset
1. 概念 什么是"标准非STL容器"?标准非STL容器是指"可以认为它们是容器,但是他们并不满足STL容器的所有要求".前文提到的容器适配器stack.que ...
- STL容器底层数据结构的实现
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层 ...
- 海量数据处理算法 各种STL容器使用的数据结构剖析
教你如何迅速秒杀掉:99%的海量数据处理面试题 转载于:结构之法算法之道blog 前言 一般而言,标题含有"秒杀","99%","史上最全/最强&qu ...
- c++之STl容器-string
目录 容器的分类 string string的概念 string的初始化 string的遍历 string的一些基本操作 char*类型和string类型互转 字符串的连接 字符串的查找和替换 str ...
- 5.1 c++ STL 容器适配器简介
1. 适配器简介 在详解什么是容器适配器之前,初学者首先要理解适配器的含义. 其实,容器适配器中的"适配器",和生活中常见的电源适配器中"适配器"的含义非常接近 ...
- C++常用STL容器
C++常用STL容器 vector 向量容器 二维数组指针.二维向量 pair 对 list 双向列表 map 表 unordered_map 哈希表 set 集合 unordered_set 哈希集 ...
- STL容器比较和基本操作
stl不同容器的优缺点 verctor vector类似于C语言中的数组,它维护一段连续的内存空间,具有固定的起始地址,因而能非常方便地进行随机存取,即 [] 操作符,但因为它的内存区域是连续的,所以 ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...
最新文章
- 建库、建表、建约束、插入测试数据
- C#中判断系统的网络连接状态的方法
- 单独运行shell脚本与crontab运行shell脚本的区别
- Android WebView与JavaScript交互详解
- Plain text, flat file, 及flat-file database 如何翻译
- 与大家分享一下2010我的找工作历程!真累啊!不过都已经结束了!
- node.js打包环境部署CentOS7.4
- Postman怎么用?
- cocos2d-x android游戏使用自己的字体
- QTouch手机组态软件APP
- minist数据集的获取方法
- Redis-事务(集成SpringBoot工程)
- 《阿尔比恩的种子》pdf、mobi、epub
- windows下Python2.7 的 pyOpenGL模块安装
- 辉芒微IO单片机FT60F023-RB方案MCU开发
- XUPT_ACM2021寒假训练第一周练习记录
- 前端:使用BootStrap搭建一个简单的网页
- 倍福--ip地址修改
- 机器学习(十八)应用实例:照片OCR
- ReentrantLock