C++ STL 容器(vector,list,deque,stack,queue,priority_queue,set,map)

  • 序列式容器
  1. vector:动态空间,随着新元素的加入,它的内部机制会自行扩充空间以容纳新元素;  它采用的数据结构是线性连续空间(push_back,pop_back,erase,clear,insert)
  2. list:环状双向链表,每次插入或者删除一个元素就配置或者释放一个空间,对于空间的利用有绝对的精准,一点也不浪费,而且对于插入和删除,list永远是常数时间;list的节点不保证在储存空间中连续存在;(push_front,push_back,erase,pop_front,pop_back,clear,remove,unique,splice,merge,reverse,sort)。
  3. deque:vector是单向的开口连续线性空间,deque是双向开口的连续线性空间,可以在首尾两端分别做元素的插入和删除;另一反面,deque没有所谓的容量观念,deque是动态的以分段连续空间(复杂度高)组合而成,随时可以增加一段新的空间并连接起来,vector则是“旧空间不足重新配置一段更大的空间,然后复制元素,释放空间”;除非必要,应该今可能选择vector而非deque,若对deque进行排序,为了最高效率,先将deque完整复制到一个vector身上,将vector排序后,再复制回deque;(push_back,push_front,pop_back,pop_front,clear,erase,insert)
  4. stack:先进后出的数据结构,不允许遍历(只对顶端操作)  ,可以以deque,list作为底部结构,并封闭其头端开口,便可以形成一个stack(所以称为container adapter 容器配接器) ;(empty,size,back,push_back,pop_back)
  5. queue:先进先出的数据结构,双向开口同样可以以deque,list为底部结构(容器配接器);(empty,size,front,back,push_front,push_back,pop_front,pop_back)
  6. priority_queue是一个拥有权值观念的queue,其内部的元素并非依照被推入的次序排列,而是依照元素的权值排列,权值高在前面,缺省情况下,priority_queue利用一个max_heap完成,后者是一个以vector表现的complete binary tree;类似queue,priority_queue归类于容器适配器;
  • 关联式容器
  1. set:set的特性是所有元素会根据元素的键值自动被排序,和map不同,map可以拥有实值(value)和键值(key),set元素的键值就是实值,set不允许有两个元素相同的键值;标准的STL set是以RB-tree为底层机制。关联式容器可以使用其所提供的find函数来搜寻元素,会比STL 算法find()更有效率,因为STL 算法find()只能循序搜寻。
  2. map:map的特性是所有元素会根据元素的键值自动排序,所有元素都是pair,同时拥有实值(value)和键值(key);pair 的第一元素是键值,第二元素是实值。不允许两个元素有相同的键值。标准STL map以RB-tree为底层机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值