C++ STL中顺序容器类型以及实现原理

原创 2014年10月05日 15:45:25

1.顺序容器类型

vector 支持随机访问
list 支持快速插入与删除
deque 双端队列
stack 后进先出(LIFO)
queue 先进先出(FIFO)
prority_queue 优先队列

2.容器元素类型约束必须满足两个约束:

2.1 元素类型必须支持复制操作

2.2 元素类型必须支持赋值操作


3.vector

内存是连续分配的,支持随机访问,capacity函数是指容器的容量,size函数是指容器中元素的个数,当size == capacity 时,如果再向容器中插入新元素,则容器会自动分配一个更大的连续内存,然后把原来的数据复制到新的连续内存,这样保证了内存的连续性。其中容器支持程序员进行内存管理, reserve函数可以设置容器初始容量,和数组下表类似。

显然容器能支持随机访问,但是元素的插入和删除需要线性时间(除非插入到最后一个元素)。

当有元素或删除插入时,插入元素位置及插入元素之后的元素的迭代器将失效(保证内存连续性,后面元素前移)。若因为插入元素大于容量导致重新分配内存,则所有元素的迭代器失效。


4.list

list的实质是双向环形链表,不支持随机访问,顾内存不一定连续,但是list的插入与删除元素的时间复杂度都是O(1),并且除了删除的当前元素的迭代器会失效,其他元素迭代器不会失效。


5.deque

双端队列,支持随机访问,所需时间为常亮。内存分配是一块,一块的,将每一块连接起来,在开头和末端增加,删除元素效率与元素个数无关,内存自动管理。


6.stack

适配器,由deque实现。不能遍历所有元素,只能后进先出。


7.queue

适配器,由deque实现。不能遍历所有元素,只能先进先出。


8.priority_queue

适配器,由vector实现。不能遍历所有元素,只能访问优先级最高的第一个元素。

C++ 学习笔记:STL 容器一些底层机制

vector 容器 list 容器 deque 容器 stack queue heap priority_queue set 和 multiset 容器 map 和 multimap 容器 hash_...
  • TQH_Candy
  • TQH_Candy
  • 2016年08月31日 18:36
  • 1277

C++STL::两种方式实现STL容器的reference语义

使用智能指针使用reference wrapper
  • lanchunhui
  • lanchunhui
  • 2015年11月17日 09:44
  • 611

c++ STL 常用容器元素类型相关限制 指针 引用

转自: http://www.cnblogs.com/my_life/articles/4044921.html c++ 的 STL 中主要有 vector , list, map, set  ...
  • Helloguoke
  • Helloguoke
  • 2016年09月22日 16:58
  • 992

深入解析C++ STL中的常用容器

这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、st...
  • u013443618
  • u013443618
  • 2015年11月21日 14:32
  • 2274

C++ STL基本容器的使用

C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与...
  • conanswp
  • conanswp
  • 2014年04月09日 21:01
  • 52140

C++中STL常用容器的区别

文章转载之博客: 我们常用到的STL容器有vector、list、deque、map、multimap、set和multiset,它们究竟有何区别,各自的优缺点是什么,为...
  • yyme411
  • yyme411
  • 2014年07月27日 21:47
  • 3752

C++ STL 几个容器的底层实现 收藏一下

STL底层数据结构实现 C++ STL 的实现: 1.vector      底层数据结构为数组 ,支持快速随机访问 2.list            底层数据结构为双向链表,...
  • single_wolf_wolf
  • single_wolf_wolf
  • 2016年10月18日 22:46
  • 3250

C/C++知识要点2——STL中Vector、Map、Set容器的实现原理

1、Vector是顺序容器,是一个动态数组,支持随机存取、插入、删除、查找等操作,在内存中是一块连续的空间。在原有空间不够情况下自动分配空间,增加为原来的两倍。vector随机存取效率高,但是在vec...
  • TommyZht
  • TommyZht
  • 2015年08月06日 10:40
  • 3604

【容器】STL之效率比较

1、vector 变长一维数组,连续存放的内存块,有保留内存,堆中分配内存; 支持[]操作,高效率的随机访问; 在最后增加元素时,一般不需要分配内存空间,速度快;在中间或...
  • u012370255
  • u012370255
  • 2014年10月28日 16:05
  • 1235

C++ STL中容器的使用全面总结

一、容器的定义        在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还...
  • u014465639
  • u014465639
  • 2017年04月19日 21:44
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ STL中顺序容器类型以及实现原理
举报原因:
原因补充:

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