STL容器总结

1.Vector:
本质是动态数组,拥有一段连续的内存空间,并且起始地址不变,能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,如果空间不够,则另外分配新的两倍大小的空间,然后把旧空间释放掉。这些都大大影响了vector的效率。
vector不适合push_front(效率很低)。
vector不适合中间插入及删除操作,中间插入及删除操作会引起内存拷贝。
2.List:
双向链表, 它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随机存取变的非常没有效率,因此它没有提供[]操作符的重载,但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。
list适合插入删除频繁的场所,不管插入还是删除,时间基本上都是常数。
list不适合随机线性访问
3.Deque:
deque在逻辑上看起来是连续的空间,内部是一段一段的定量连续空间构成,一旦有必要在deque的前端或尾端增加新空间,deque会配置一段定量的连续空间,串联在整个deque的头部或尾部。
deque采用一块所谓的map(注:不是stl里面的map容器)作为中控器,其实就是一小块连续空间,其中的每一个元素都是指针,指向另外一段较大的连续线性空间,称之为缓冲区。
设计deque迭代器应该具备两个特征的结构和功能:
1.既然deque存储空间是分段的连续空间,迭代器应该能够指出当前的连续空间在哪里。
2.因为缓冲区有边界,迭代器还应该能判断当前是否处于缓冲区的边缘,如果是,一旦前进或后退,
就必须跳转到下一个或上一个缓冲区。
deque实际上是在功能上合并了vector和list。
优点:
随机访问方便,即支持[]操作和vector.at();
在内部方便的进行插入和删除操作;
可在两端进行push、pop。
缺点:
因为涉及数据结构的维护比较复杂,采用分段连续空间,所以占有内存相对多。
使用区别:
如果需要高效的随机存储,而不在乎插入和删除的效率,则使用vector。
如果需要大量的插入和删除,而不关心随机存取,则应使用list。
如果需要随机存取,且关心亮度数据的插入和删除,则应使用deque。
在这里插入图片描述
在这里插入图片描述
4.Stack:
stack是deque的一种变种,优缺点不变。
5.Queue:
queue是deque的一种变种,优缺点不变。
6.Heap:
容器采用二叉树存储数据,所以heap容器适合经常排序的场所,heap容器里的数据是自动排序的。
7.Map:
STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据处理能力,由于这个特性map内部的实现自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能。
8.Set:
set是集合,set中不会包含重复的元素,这是和vector的第一个区别,第二个区别是set内部用平衡二叉树实现,便于元素查找,而vector是使用连续内存存储,便于随机存取。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值