C++stack栈

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构

需要:#include <stack>  

栈(stack)是限制插入和删除只能在一个位置上进行的线性表,该位置在表的末端,叫做栈顶。添加元素只能在尾节点后添加,删除元素只能删除尾节点,查看节点也只能查看尾节点。添加、删除、查看依次为入栈(push)、出栈(pop)、栈顶节点(top)。形象的说,栈是一个先进后出(LIFO)表,先进去的节点要等到后边进去的节点出来才能出来

 

stack类可以用任何顺序容器vector、list、deque实现。默认情况下,stack用deque实现

为了达到最佳性能,用deque或vector作为stack的基础容器

#include<iostream>
#include <stack>
#include <queue>
#include <list>

int main()
{
    
    std::stack<int> deque_stack;  //声明stack,默认以deque容器实现
        
    std::stack<int, std::vector<int>> vector_stack;  //声明stack,以vector容器实现
        
    std::stack<int, std::list<int>> list_stack;  //声明stack,以list容器实现

    std::stack<int> stack;
    std::stack<int> stack2 = stack; //声明一个int类型的stack2,将stack的元素复制给stack2
    std::stack<int> stack3(stack); //声明一个int类型的stack3,将stack的元素复制给stack3

    bool b= stack.empty(); //判断是否为空
    //若stack1为空,则返回true
    std::cout << b << std::endl;
    
    for (int i = 0; i < 5; ++i) {
        stack.push(i); //把数据放入栈顶
    }
    
    int n=stack.size(); //stack当前存放的元素的个数
    std::cout << n << std::endl;

    int x=stack.top(); //返回栈顶元素
    //条件是stack不为空

    std::cout << x << std::endl;

    stack.pop();  //删除stack栈顶元素

    stack.emplace(20);  //把数据放入栈顶
    /*
    push() 实际上是调用的底层容器的push_back()函数,新元素的值是push函数参数的一个拷贝。
    emplace() 实际上是调用的底层容器的emplace_back()函数,新元素的值是在容器内部就地构造的,不需要移动或者拷贝
    */

    stack.swap(stack2);  //将stack和stack2交换

    return 0;
}

 

 

 

 

posted @ 2020-08-25 07:43  天子骄龙  阅读(570)  评论(0编辑  收藏  举报