关键词1
关键词101
关键词201
关键词301
关键词401
关键词501
关键词601
关键词701
关键词801
关键词901
关键词1001
关键词1101
关键词1201
关键词1301
关键词1401
关键词1501
关键词1601
关键词1701
关键词1801
关键词1901
懂视1
懂视101
懂视201
懂视301
懂视401
懂视501
懂视601
懂视701
懂视801
懂视901
懂视1001
懂视1101
懂视1201
懂视1301
懂视1401
懂视1501
懂视1601
懂视1701
懂视1801
懂视1901
文库1
文库101
文库201
文库301
文库401
文库501
文库601
文库701
文库801
文库901
文库1001
文库1101
文库1201
文库1301
文库1401
文库1501
文库1601
文库1701
文库1801
文库1901
步遥情感网
全部频道
首页
科技
教育
生活
旅游
时尚
美容
美食
健康
体育
游戏
汽车
家电
您的当前位置:
首页
STL学习之deque
STL学习之deque
来源:步遥情感网
deque是一种双向开口的
分段连续线性空间
,所谓双向开口是可以在头尾两端分别做元素的插入和删除操作。
如下图:
回想vector,它内部是一个线性的数组,那么实际也可以做到deque双向开口的特性,但是你可以看下vector的成员函数,插入和删除只提供push_back()和pop_back(),并没有push_front()和pop_front(),这是为什么呢? 其实主要还是效率的考虑,vector在头部插入和删除是非常低效的,需要copy大量元素,所以不支持该函数绝对是没任何异议的。
deque内存空间组织结构:
相比于vector,deque实际上不是绝对的线性连续空间,只是一种伪线性连续,称之为分段式线性连续,绝对线性连续存在动态扩容的不便,所以采用分段式在扩容和性能上做了一个折中方案。deque的内存结构主要由两部分组成:中控器map和数据缓冲区。中控器map是一个数据缓冲区表,把各个数据缓冲区串联起来;数据缓冲区存储用户的数据。
有了上面的图,我们已经大概上猜到deque元素的管理方式了,deque中是怎么样进行迭代器++和--的呢,下图是迭代器的数据结构示意:
deque中会维护两个迭代器start,finish,分别指向头和尾的数据缓冲区。当数据缓冲区需要扩充的时候,会新申请1个数据缓冲区,这时中控器map会在下一个位置的指针指向新的数据缓冲区,同事finish迭代器也会指向新的数据缓冲区。
因为deque不是绝对连续的空间,因此迭代器移动操作都会比普通的结构要复杂很多。
中控器map的扩容?
从deque的特性可以看出,在deque之上有很多中玩法,所以deque可以作为很多adaptor的底层实现,非常之重要!
因篇幅问题不能全部显示,请点此查看更多更全内容
查看全文