stl之deque、queue和stack

deque

deque 有个以 vector 组成的控制中心 map ,意味这它会自动扩充,每个 vector 元素指向一个 buffer缓冲区,这个控制中心有 start 和 finish iterator分别有 node 指向第一个 buffer 和 最后一个,每个 buffer 也有 iterator ,里面有4个元素:cur、first、last、node分别指向该 buffer 的当前指向元素、buffer 空间第一和最后元素和在控制中心的位置
当然,因为控制中心是 vector,那已经使用了的优先是在整个 vector 的中段,扩充的时候也是 copy 在中段
image


map 的类型是 T**,指针指针,因为还有指向 vector 元素嘛


那 buffer 里可以放多少个元素呢?可以指定,但是没有指定的情况下,如果元素大小大于 512 字节,那就放 1 个,小于的话放 512/该元素大小 个
image

deque iterator

首先它的 iterator_category 是 random_access_iterator_tag 虽然事实上它不少连续的但是声称它是连续的
image

deque::insert()

先判断是不是头或尾,那就可以直接 push front 或 back,都不是就看看插入位置离哪边近,推动较少元素的那边再插入
image

如何模拟连续空间

靠重载,像数组一样的 +、-、[ ]、+=、-= 等都要进行重载,比如 - ,那要知道两个元素之间的距离,就要知道其中所处之间有几个 buffer 再加上其在 buffer 上所处的位置关系,要知道有几个 buffer 用 node 相减 - 1,就可以
image

queue 和 stack

里面内涵 deque,只调用 deque 的一部分函数模拟就可以,所以也说他们其实是适配器,他们也能用 list 来模拟;stack 还能用 vector 模拟但 queue 不可以;他们都不可以用 set 和 map 模拟
注意 stack 和 queue 都不允许遍历,所以不提供 iterator

posted @ 2023-03-12 22:04  acwarming  阅读(14)  评论(0编辑  收藏  举报