deque

  • deque特点:① 分段连续 ② 双向均可增删
  • deque的结构:一个中控器vector,是一个指针数组,每个指针指向一块buffer,从中间往两边用,用于实现双端增删的效果;
  • deque有四个数据成员:
    ①两个迭代器(即begin和end返回的迭代器,分别指向首元素和尾后位置)
    ②一个指向中控器的指针map(用vector实现的)
中控器的大小:最少8块buffer,且从中往两边用
中控器的扩容:跟vector一样,2倍扩容; 且根据左侧满还是右侧满,说明对应方向的插入需求更大,则扩容之后对应这边会多留出一些位置,若左右两侧差不多都用完了,说明左右的插入需求也差不多,因此扩容之后也会在两侧留出等大的buffer
buffer的元素个数:若存的元素类型>=512字节<就只存一个; 否则,存512/元素类型大小 个元素;

③一个表示中控器大小map_size

  • 迭代器:含有四个数据成员:cur指针表示当前元素位置,first和last表示当前元素所属的buffer的边界位置,node用于指回该buffer在中控器的位置(用于对外界维护deque是连续的假象)
deque实际上是分段连续的(虽然分段,但模拟出连续的假象),但deque迭代器为了提供随机访问迭代器的功能,需要重载deque迭代器的++--++=--=[]*->;当需要进行跨越不同buffer时,需要node返回中控器并找到目标buffer;
  • 容器可支持哪些功能,一般都是通过重载容器迭代器的某些运算符实现的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值