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; }