中文标准库:std::stack

C++内存中的堆和栈

FILO:First In Last Out(先进后出)

栈是适配器

1.构造

stack构造不能直接使用初始化列表 std::initializer_list,可以使用其他容器初始化stack,使用std::deque不需要指定容器,使用其他容器(例如:std::vector)需要指定容器。

	std::deque<int> myDeque(3, 5);
	std::vector<int> myVector(2, 4);
	std::list<int> myList(3, 3);

	//std::stack<int> s1{ 1,2,3 }; //error
	std::stack<int> s2(myDeque);   //s2 = 5,5,5
	//std::stack<int> s3(myList);  //error
	std::stack<int, std::list<int>> s4(myList);     //s4 = 3,3,3
	//std::stack<int> s5(myVector);//error
	std::stack<int, std::vector<int>> s6(myVector); //s6 = 4,4

2.访问栈顶元素(只能访问栈顶元素)

auto ret = myStack.top() //top()返回栈顶元素

如果访问的栈为空,则会中断,因此使用top()前一定要保证该栈不为空

3.添加

std::stack<int> s7;
s7.emplace(2); //在栈顶插入一个元素2
s7.push(5);    //在栈顶插入一个元素5

4.删除

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

如果删除的栈为空,则会中断,因此使用pop()之前要保证该栈不为空

5.其他

  • 返回栈的大小

size()

  • 栈是否为空

empty()

  • 两个栈互相交换

必须是两个类型相同的栈才能交换,用std::vector初始化的stack不能和std::deque初始化的stack交换

swap(stack& other)

完整示例代码

#include <stack>
#include <vector>
#include <deque>
#include <list>

int main()
{
	std::deque<int> myDeque(3, 5);
	std::vector<int> myVector(2, 4);
	std::list<int> myList(3, 3);

	//std::stack<int> s1{ 1,2,3 }; //error
	std::stack<int> s2(myDeque);   //s2 = 5,5,5
	//std::stack<int> s3(myList);  //error
	std::stack<int, std::list<int>> s4(myList);     //s4 = 3,3,3
	//std::stack<int> s5(myVector);//error
	std::stack<int, std::vector<int>> s6(myVector); //s6 = 4,4


	std::stack<int> s7;
	s7.emplace(2); //在栈顶插入一个元素2
	s7.push(5);    //在栈顶插入一个元素5

	s7.pop();

	bool IsEmpty = s7.empty();  //false
	size_t Size = s7.size();    //1

	s2.swap(s7);
	//s6.swap(s4); //error

	return 0;
}