怎么理解这个适配器?
1、适配器底层没有自己的数据结构,它是另外一个容器的封装,它的方法,全部由底层依赖的容器进行实现。
2、没有实现自身的迭代器。
为什么queue和s’tack底层不依赖vector而以来deque呢?
1、vector的初始内存效率太低了,每次都是二倍扩容,deque的第二维默认是4096/sizeof(int)=1024个数组空间,不需要多次扩容。
2、对于queue来说,需要支持尾部插入,头部删除,deque这两项操作的时间复杂度都是O(1),如果依赖vector,其底层出队效率很低。
3、vector需要大片连续的内存,而deque只需要分段的内存,在存储大量数据时,deque对内存的利用率最好。
priority_queuq底层为什么以来vector呢?
底层默认把数据组成一个大根堆结构,需要在一个内存连续的数组上构建一个大根堆或者小根堆,父子节点之间的关系是通过下标来确定的,而deque的第二维上不同数组的下标会重新计算,只有在同一个数组中计算下标才有意义。