STL 容器

转载 2016年05月30日 17:21:42

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_setkey进行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相同。

STL中各种容器的简单特点

(1) vector 内部数据结构:数组。 随机访问每个元素,所需要的时间为常量。 在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。 可动态...
  • cc946079647
  • cc946079647
  • 2014年07月17日 13:32
  • 1134

STL中常用容器的选择

今天去面试问到了stl的常用容器问题,但是提前没准备,平时也没太在意,还有就是忘了。总之,回答得很狼狈。 希望能在这里整理一下: 1.vector 2.deque 3.list 4.s...
  • cz168love
  • cz168love
  • 2015年05月28日 20:02
  • 1117

STL容器的适用情况和缺点

一.各种容器的特性 vector 典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间...
  • qq_14898543
  • qq_14898543
  • 2016年05月12日 09:56
  • 555

多年来,STL容器的使用总结!

第1条:慎重选择容器类型。 标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。 非标准序...
  • shaderdx
  • shaderdx
  • 2017年02月20日 16:31
  • 554

C++11标准下STL的容器分类

第一种:顺序容器 1、vector:可变数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢; 2、deque:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快; 3、list...
  • qq_33511280
  • qq_33511280
  • 2017年03月15日 14:58
  • 505

STL常用容器对比

STL的常用容器大致有以下8个: 1.vector     vector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问。由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。...
  • u011822862
  • u011822862
  • 2016年08月13日 22:50
  • 1387

STL常用容器详细解析

这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、sta...
  • ahuang1900
  • ahuang1900
  • 2014年08月28日 19:33
  • 1740

STL学习系列之六—容器适配器

STL学习系列之六—容器适配器 STL提供了三种容器适配器:stack,queue,priority_queue。 适配器并不是第一类容器,因为它们并没有提供与元素的保存形式有关的真正数据结构实现...
  • feitianxuxue
  • feitianxuxue
  • 2012年02月11日 11:49
  • 7778

初探STL之容器适配器

容器适配器   用某种顺序容器来实现
  • wxwd1
  • wxwd1
  • 2014年07月10日 13:20
  • 1209

【容器】STL之效率比较

1、vector 变长一维数组,连续存放的内存块,有保留内存,堆中分配内存; 支持[]操作,高效率的随机访问; 在最后增加元素时,一般不需要分配内存空间,速度快;在中间或...
  • u012370255
  • u012370255
  • 2014年10月28日 16:05
  • 1280
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL 容器
举报原因:
原因补充:

(最多只允许输入30个字)