STL 标准容器比较

这一类的比较以前写过一篇,但是找不到了。这次再总结一下。

STL基本容器分为:顺序容器和关联容器

顺序容器

1.Vector其内部是由动态数组(dynamic array)实现,其他操作都是以这个实现为基础的。

    Vector支持随机存取,只要知道位置就可以在常数时间内存取任何一个元素。在末端附加或者删除元素性能很好

    在中部删除或者添加元素性能不理想,因为要移动后面的其他元素。

    Vector容量很重要,因为一旦元素数量大于容量,内存会重新分配,导致references,pointers和iterators都失效

    内存配置很耗时间。

    在概念上Vector和String类似,但是Vector不能用reserve()来缩减容量。

    安插元素和移除元素都会使“作用点”之后的各元素的references,pointers和iterators失效。   

    Vector有特化版本vector<bool>,其耗用空间远远小于一般vector。

 

2.deque同样由动态数组来实现,但是数组头尾都开放,通常实现为一组独立的区块。deque和vector有着几乎一摸一

样的接口,但是在功能上也有不同之处:

(1)可以在两端安插或者删除元素。

(2)存取元素时,deque内部有一个间接过程,所以元素存取和迭代器动作会稍慢。

(3)迭代器要在不同的区块跳转,所以必须是智能指针,非一般指针

(4)不支持对内存的重分配机制。除了头尾,在任何作用点安插或删除元素都会使所有pointers,references,iterator失效。

(5)会释放不再被使用的区块。

(6)不提供容量capacity, reserve()操作。

 

3.Lists由双向链表实现。

   list和vector,deque的主要区别为:

   (1)list 不支持随即存取

   (2)在任何位置安插或者删除都是常数时间完成。

   (3)安插或删除不会造成迭代器失效


4.stack系由deque实现的后进先出的堆栈。

   stack核心接口为三个成员函数push(), top(),pop(),底层会调用deque的,push_back(),back().

   注意:pop()是移除下一个元素但是并不将它返回,top()返回下一个元素但是并不将它移除。


5.queue同样由deque实现,是一个先进先出的队列。

  实际上queue单纯的把各项操作转化为内部容器的对应调用。

  注意:pop()虽然移除下一个元素,但是并不返回它,front()和 back()返回下一个元素,但是并不

  移除它。


6.priority queue 默认由vector实现

   实际上priority queue单纯的把各项操作转化为内部容器的对应调用。

   注意优先队列中,“下一个元素”是指优先级最高的元素

   核心接口为三个成员函数push(), top(),pop()


7.String


关联容器:

Set和Multisets

Set和Multisets都是以平衡二叉树实现。Multiset允许元素重复,而Set不允许。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值