秋招准备1

为什么选择deque作为stack和queue的底层默认容器?
首先要知道,stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()和pop_back()操作的线性结构,都可 以作为stack的底层容器,比如vector和list都可以;queue是先进先出的特殊线性数据结构,只要具有 push_back和pop_front操作的线性结构,都可以作为queue的底层容器,比如list。但是STL中对stack和 queue默认选择deque作为其底层容器,主要是因为:

  • stack和queue不需要遍历(因此stack和queue没有迭代器),只需要在固定的一端或者两端进行操作。
  • 在stack中元素增长时,deque比vector的效率高;queue中的元素增长时,deque不仅效率高,而且内存使用率高。vector当容量不够时,会开更大的空间,拷数据然后释放原来的空间,操作复杂。而deque会找另一块内存继续存放数据,效率高。
  • 相比较list,deque的插入操作会更加的高效,而且内存的使用率高,list会导致更多的内存碎片。

秋招准备1_第1张图片
秋招准备1_第2张图片
秋招准备1_第3张图片
秋招准备1_第4张图片

秋招准备1_第5张图片
为什么要对齐到8呢?主要是因为为了兼容64位系统,一个指针是8字节。

秋招准备1_第6张图片
秋招准备1_第7张图片
秋招准备1_第8张图片
秋招准备1_第9张图片
秋招准备1_第10张图片
空间配置器只负责空间的申请和释放,要是想要实现对对象的创建,可以封装两个静态函数,在一个类中,一个负责创建,一个负责销毁,空间配置器一般和定位new表达式一起使用。

你可能感兴趣的:(C++小工修炼之路)