为什么stack和queue默认使用deque作为底层容器?

发布时间 2023-12-04 16:07:19作者: ponder776

在C++中,stackqueue默认使用deque作为底层容器的原因主要有以下几点:

  1. 操作效率deque(双端队列)支持在头尾两端进行插入和删除操作,且时间复杂度都为O(1),非常高效1。而vector在增长到一定长度时为了保证完全连续,需要重新申请更长的内存,并把原来的元素全部拷贝过去2。这使得vector的尾部插入操作在某些情况下的时间复杂度会变为O(n),效率较低2

  2. 空间利用率deque并不是真正连续的一段空间,而是由一段段连续的小空间拼接而成1。这使得deque在空间利用率上相比于list、vector有优势1

  3. 适应性deque的特性使其更能贴合stackqueue的需求1stack为先进后出结构,所有具有push_backpop_back的容器都可以作为底层默认容器1queue为先进先出结构,所有具有push_backpop_front的容器都可以作为底层默认容器1deque恰好满足这两种操作的需求1

  4. 灵活性:虽然dequestackqueue的默认底层容器,但C++标准库允许用户根据自己的需求选择其他容器作为底层容器2。例如,如果能预分配足够的容量,使用vector作为stack的底层容器可能会更优2

总的来说,deque作为stackqueue的默认底层容器,是因为它在操作效率、空间利用率和适应性等方面的综合考虑结果12