STL的容器可以分为以下几个大类:
一:序列容器, 有vector, list, deque, string.

二 : 关联容器,     有set, multiset, map, mulmap

hash_set,hash_map, hash_multiset, hash_multimap

三: 其他的杂项: stack, queue, valarray, bitset

STL各个容器的实现:

(1) vector
内部数据结构:数组。
随机访问每个元素,所需要的时间为常量。
在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。
可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。
vector的迭代器在内存重新分配时将失效(它所指向的元素在该操作的前后不再相同)。当把超过capacity()-size()个元素插入 vector中时,内存会重新分配,所有的迭代器都将失效;否则,指向当前元素以后的任何元素的迭代器都将失效。当删除元素时,指向被删除元素以后的任何 元素的迭代器都将失效。

(2)deque
内部数据结构:数组。
随机访问每个元素,所需要的时间为常量。
在开头和末尾增加元素所需时间与元素数目无关,在中间增加或删除元素所需时间随元素数目呈线性变化。
可动态增加或减少元素,内存管理自动完成,不提供用于内存管理的成员函数。
增加任何元素都将使deque的迭代器失效。在deque的中间删除元素将使迭代器失效。在deque的头或尾删除元素时,只有指向该元素的迭代器失效。

(3)list
内部数据结构:双向环状链表。
不能随机访问一个元素。
可双向遍历。
在开头、末尾和中间任何地方增加或删除元素所需时间都为常量。
可动态增加或减少元素,内存管理自动完成。
增加任何元素都不会使迭代器失效。删除元素时,除了指向当前被删除元素的迭代器外,其它迭代器都不会失效。

(4)slist
内部数据结构:单向链表。
不可双向遍历,只能从前到后地遍历。
其它的特性同list相似。

(5)stack
适配器,它可以将任意类型的序列容器转换为一个堆栈,一般使用deque作为支持的序列容器。
元素只能后进先出(LIFO)。
不能遍历整个stack。

(6)queue
适配器,它可以将任意类型的序列容器转换为一个队列,一般使用deque作为支持的序列容器。
元素只能先进先出(FIFO)。
不能遍历整个queue。

(7)priority_queue
适配器,它可以将任意类型的序列容器转换为一个优先级队列,一般使用vector作为底层存储方式。
只能访问第一个元素,不能遍历整个priority_queue。
第一个元素始终是优先级最高的一个元素。

(8)set
按照键进行排序存储, 值必须可以进行比较, 可以理解为set就是键和值相等的map
键唯一。
元素默认按升序排列。
如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。

(9)multiset
键可以不唯一。
其它特点与set相同。

(10)hash_set
与set相比较,它里面的元素不一定是经过排序的,而是按照所用的hash函数分派的,它能提供更快的搜索速度(当然跟hash函数有关)。hash_set将key进行hash, 然后将key放在hash值对应的桶中, 原理可以这样理解, hash_set就是key, value相等的hash_map
其它特点与set相同。

(11)hash_multiset
键可以不唯一。
其它特点与hash_set相同。

(12)map
键唯一。
元素默认按键的升序排列。
如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。

(13)multimap
键可以不唯一。
其它特点与map相同。

(14)hash_map
与map相比较,它里面的元素不一定是按键值排序的,而是按照所用的hash函数分派的,它能提供更快的搜索速度(当然也跟hash函数有关)。
其它特点与map相同。

(15)hash_multimap
键可以不唯一。
其它特点与hash_map相同。

转载于:https://www.cnblogs.com/chenchenwang/p/6751822.html

C++ STL库的总结以及实现原理相关推荐

  1. STL库:string

    STL库:string 文章目录 STL库:string 1.STL库对于string类的介绍 2.string常用接口的掌握 2.1 string的构造接口 2.2 string的容量操作接口 2. ...

  2. C++STL库:String介绍

    C++STL库 学习方法:使用STL的三个境界:能用,明理,能扩展. 今天我们开启一个新主题:C++数据结构之STL库,我们将介绍STL库里常用库的用法与实现过程. 常用库 库名称 所需头文件 数据结 ...

  3. Qt框架与STL库之间的巅峰对决:差异、优缺点及适用场景

    Qt框架与STL库之间的巅峰对决:差异.优缺点及适用场景 引言 对比的重要性 Qt框架与STL库简介 博客内容概览 Qt框架基础 Qt框架的特点与组成 Qt的信号槽机制 Qt容器类简介 数据结构的对比 ...

  4. 关于c++ STL库的一些总结

    本人使用c++的STL库的一些总结 文章目录 本人使用c++的STL库的一些总结 前言 String的相关测试 Map的细节测试 SET的相关测试 总结 前言 以下都是个人在使用c++stl的时候容易 ...

  5. c++ stl库的基础学习

    stl库学习 学了之后发现,太棒了,终于可以像python一样,不用那么麻烦了 这里面的东西其实都是可以类比到python那里面的 比如vector就是list,map就是dict,set就是会知道排 ...

  6. 菜菜学C++之标准模板库(STL库)

    菜菜学C++之标准模板库(STL库) 一.知识点梳理 1.标准模板库(STL)简介 2. 容器 2.1 容器的分类 2.1.1 顺序容器--vector 2.1.2 顺序容器--deque 2.1.3 ...

  7. C++11 中STL库中新增内容

    C++ 11一个比较显著的变化是以前boost库中的一些函数被正式标准化合入到STL中了,本文就简单的介绍一下. 引用包装器(Reference Wrapper) 当模板函数参数为泛型类型的时候,无法 ...

  8. STL库容器vector at函数

    STL库容器vector at函数 v.at(n)返回v指定位置n的元素.at函数比[]运算符更加安全, 因为它不会让你去访问到越界的元素,一旦越界将会在运行时中止程序并抛出一个异常std::out_ ...

  9. c++中algorithm头文件、STL库简介及使用说明

    c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...

最新文章

  1. MySQL中truncate误操作后的数据恢复案例
  2. JDK1.8新特性之时间和日期的使用
  3. Jarvis OJ web(一)
  4. DELPHI串口通讯编程
  5. vco为什么低频下起振困难_为什么协作如此困难?
  6. python安装方法_Python基础入门——简介和环境配置,超实用!
  7. MARKDOWN使用小计
  8. 【51Nod1773】A国的贸易 解题报告
  9. 同济大学计算机保研名单,同济大学2021届保研率27.8%,主要保研本校、复交清国...
  10. Solr中的q与fq参数的区别
  11. 结构体做函数参数的进阶:嵌套一二级指针
  12. Linux之ping命令
  13. 新中大银色快车服务器重装,新中大简约型ERP软件银色快车SEV9.0版安装说明.doc...
  14. 换IP软件如何使用,一起来看下换IP软件的使用教程
  15. VS201X更换平台Rebuild项目时,旧平台生成的发布件被删除
  16. SolidWorks转3DMAX再到Unity3D的转换模型及单位设置
  17. map文件介绍及使用
  18. 使用WireShark了解浏览器访问网络的整个过程
  19. VRP基础介绍:VRP基础
  20. Android自定义键盘之汉字键盘

热门文章

  1. oracle10grac创建单实例,Oracle10gLinux单实例迁移到rac
  2. 网络推广期间遇到页面无效收录情况网络推广专员如何应对?
  3. 网站SEO优化的高效手段有哪些?
  4. SEO网络优化的三个博客优化技巧
  5. antd 动态添加表单_react Ant Design 动态生成表单,并带验证
  6. led灯bin值_「技术贴」如何判断LED透明屏正发光与侧发光的优劣?
  7. 计算机控制直流电机闭环调速实验,最小拍控制系统及直流电机闭环调速控制系统设计和实现实验报告...
  8. python中scrapy框架_简述python Scrapy框架
  9. Java树形转扁平_多层嵌套map对象转扁平化map
  10. 20年总结,21年展望