stl栈和队列的内部实现

Posted

技术标签:

【中文标题】stl栈和队列的内部实现【英文标题】:internal implementation of stl stack and queues 【发布时间】:2014-08-15 15:54:32 【问题描述】:

我正在使用 stl 堆栈和队列来存储大量项目。标准模板库中的堆栈是如何在内部实现的?是链表的形式吗?或者有没有给它任何最大尺寸?

【问题讨论】:

std::stack 默认使用std::deque。 looking at some documentation 没什么问题。 或者直接看实现,因为STL大多写在头文件中。 【参考方案1】:

C++ 标准库中的堆栈和队列都是容器适配器。这意味着他们使用指定的容器作为存储数据的底层手段。默认情况下,它们都使用std::deque,但您可以使用例如向量与

std::stack<int,std::vector<int>> s;

【讨论】:

【参考方案2】:
vector works internally...


#include <iostream>
#include <vector>

struct Sample

    Sample()
    Sample(const Sample & obj)
    
        std::cout<<"Sample copy constructor"<<std::endl;
    
;
int main()

    std::vector<Sample> vecOfInts;

    std::cout<<"Capacity :: "<<vecOfInts.capacity()<<std::endl;
    std::cout<<"Size :: "<<vecOfInts.size()<<std::endl;
    int capcity = vecOfInts.capacity();
    for(int i = 0; i < capcity + 1; i++)
        vecOfInts.push_back(Sample());

    std::cout<<"Capacity :: "<<vecOfInts.capacity()<<std::endl;
        std::cout<<"Size :: "<<vecOfInts.size()<<std::endl;

    for(int i = 0; i < capcity + 1; i++)
            vecOfInts.push_back(Sample());

    std::cout<<"Capacity :: "<<vecOfInts.capacity()<<std::endl;
    std::cout<<"Size :: "<<vecOfInts.size()<<std::endl;

    return 0;

【讨论】:

以上是关于stl栈和队列的内部实现的主要内容,如果未能解决你的问题,请参考以下文章

学习:STL----优先队列

STL优先级队列剖析及模拟实现

基本数据结构 - 栈和队列

使用 STL 内部实现的红黑树

STL:vector内部实现原理及基本用法

C ++中STL :: MAP的内部实现