stl栈和队列的内部实现

     2023-02-22     206

关键词:

【中文标题】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;

【讨论】:

基本数据结构-栈和队列

...据结构的人来说,没有什么难处,简单的总结一下。1、栈和队列  栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行... 查看详情

《算法导论》读书笔记

...据结构的人来说,没有什么难处,简单的总结一下。1、栈和队列  栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行... 查看详情

数据结构栈和队列oj练习(栈和队列相互实现+循环队列实现)(代码片段)

...队列实现栈2.用栈实现队列3.循环队列前言前面在学习了栈和队列的实现之后,相信大家对栈和队列的结构和使用方式都有了一些理解。下面我们就来进行一些练习,这这章的练习相对于原来在难度上有了一些提升。原来... 查看详情

栈和队列-第五节:javac++python实现栈和队列

文章目录一:栈的实现(1)C语言实现(2)C++实现(3)Java实现(4)Python实现二:队列实现(1)C语言实现A:链式队B:循环队列(2)C++实现A:链式队B:循环队列(3)Java实现A:链式队B:循环队列一:栈的实现(1)C语言实现 查看详情

数据结构初阶:栈和队列(代码片段)

文章目录栈和队列1栈1.1栈的定义和结构栈结构体定义1.2栈的实现栈初始化和销毁栈的压入和弹出获取栈顶元素其他基本接口2队列2.1队列的定义和结构队列结构体定义2.2队列的实现队列初始化和销毁队尾入队和队头出队获取队头... 查看详情

简单的栈和队列

...(Queue)3在C++中STL中预置了<stack>和<queue>4简单介绍栈和队列的思想和使用方法5栈:先入后出(LIFO),可以理解为将球放进一个一段封闭的管子,只能从入口区出,先进的球只能最后出来6队列:先入先出(FIFO),可以理解... 查看详情

算法:栈和队列

(一)栈和队列的基本性质栈是先进后出的队列是先进先出的栈和队列在实现结构上可以有数组和链表两种形式数组结构实现较容易用链表结构较复杂,因为牵扯很多指针操作(二)队列和栈的基本操作pop操作(栈尾弹出一个元... 查看详情

数据结构与算法--栈与队列

栈和队列栈和队列都是比较常用的数据结构。栈的应用非常的广泛,比如说,递归函数的实现就是借助于栈保存相关的数据。操作系统中每个线程也会使用栈来保存函数调用涉及到的一些参数和其他变量等。栈最大的一个特点就... 查看详情

实现特殊的栈和队列(代码片段)

利用一个固定数组实现栈和队列classArrayStack//用数组实现栈public:ArrayStack(intinitsize)//创建一个固定长度的数组if(initsize<0)cout<<"数组长度小于0"<<endl;elsearray=vector<int>(initsize-1);size=0;voidp 查看详情

数据结构java版详解栈和队列的实现(代码片段)

...列的单链表实现2.4数组实现队列2.5循环队列2.6双端队列3.栈和队列练习题3.1有效的括号3.2用队列实现栈3.3用栈实现队列3.4实现一个最小栈3.5设计循环队列1.栈1.1概念栈:是一种特殊的线性表,其只允许在固定的一端进行插... 查看详情

数据结构java版详解栈和队列的实现(代码片段)

...列的单链表实现2.4数组实现队列2.5循环队列2.6双端队列3.栈和队列练习题3.1有效的括号3.2用队列实现栈3.3用栈实现队列3.4实现一个最小栈3.5设计循环队列1.栈1.1概念栈:是一种特殊的线性表,其只允许在固定的一端进行插... 查看详情

栈和队列数据结构(代码片段)

前言:栈和队列都是基于List(线性表)来实现的,且其限制比List更严格(提供的操作更少),即List比站栈和队列更灵活栈的实际应用场景非常多,队列的实际应用场景更多目录栈(Stack)概念栈的实现队列(Queue)概念队列... 查看详情

第三章:1.栈和队列--栈的表示及实现

前言:  栈和队列是两种重要的线性结构。从数据结构角度来看,栈和队列也是线性表,它的特殊性在于其操作是线性表的子集,是操作受限的线性表,因此可以称作限定性的数据结构。  (限定性:如、人为的规定线性表... 查看详情

stl中有关dequestackqueuepriority_queue(代码片段)

...que是双端队列,所以有头插头删和尾插尾删操作。下面的栈和队列的底层都是通过的deque实现的。为什么要用deque作为其底层数据结构呢?主要是因为:栈和队列都只需在一头进行操作,故不需要迭代器,只要具有pushback和popback... 查看详情

栈和队列的常见题型

一、常见题型如下:1.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) 2.使用两个栈实现一个队列 3.使用两个队列实现一个栈 4.元素出栈、入栈顺序的合法性。如入栈的序列(1,2,3,4,... 查看详情

栈和队列学习笔记(21.10.12)(代码片段)

以下的栈和队列不是STL。栈和队列栈一、栈的定义二、顺序栈三、链栈四、拓展:两栈共享空间五、拓展:表达式求值1.中缀表达式求值2.中缀表达式->后缀表达式3.后缀表达式求值4.中缀表达式->前缀表达式5.前缀表达... 查看详情

算法实现栈和队列

栈(stack)栈(stack)是一种后进先出(LIFO)的集合类型,即后来添加的数据会先被删除  可以将其类比于下面文件的取放操作:新到的文件会被先取走,这使得每次取走的文件都是最新的。  栈可以用数组或者队... 查看详情

栈和队列的实现(代码片段)

(文章目录)一、栈1.概念二、栈的实现(顺序表)1.函数的定义和结构体的创建——stack.h#pragmaonce#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<assert.h>typedefintdatatype;typedefstructstack datatype 查看详情