一.stack简介
- stack即“堆栈”, 是STL模板库中的一种后进先出(FILO)的适配器(容器的封装),头文件:
<stack>
- 堆栈遵循后进先出的原则,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。
- 栈内的元素不能访问。如果一定要访问栈内的元素,只能将其上方的元素全部从栈中删除,使之变成栈顶元素才可以。
- stack对象的默认构造形式:
stack <T> stkT;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416092731674.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x6cTgwOTA=,size_16,color_FFFFFF,t_70#pic_center)
二.stack成员函数
1.stack::empty():返回栈是否为空,如果为空则返回 true,否则返回 false。
std::stack<int> myStack;
if(myStack.empty()){
std::cout << "Stack is empty." << std::endl;
}
2.stack::size():返回栈中元素的个数。
std::stack<int> myStack;
std::cout << "Size of stack: " << myStack.size() << std::endl;
3.stack::top():返回栈顶元素的引用,但不删除该元素。如果栈为空,则该操作未定义。
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
std::cout << "Top element: " << myStack.top() << std::endl;
4.stack::push(const T& value):在栈顶插入一个元素。
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
5.stack::emplace(Args&&… args):在栈顶插入一个元素,通过参数直接构造元素。这个函数比 push() 更高效,因为它在插入元素时可以直接调用构造函数。
std::stack<std::string> myStack;
myStack.emplace("Hello");
myStack.emplace("World");
6.stack::pop():从栈顶删除一个元素,但不返回该元素。如果栈为空,则该操作未定义。
std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.pop();
三.stack实例
#include "pch.h"
#include <iostream>
#include <stack>
using namespace std;
void print(stack<int>stk) {
stack<int> tmp;
cout << "栈顶至栈底:" << endl ;
while (!stk.empty()) {
cout << stk.top() << " ";
tmp.push(stk.top());
stk.pop();
}
while (!tmp.empty()) {
stk.push(tmp.top());
tmp.pop();
}
cout << endl << endl;
}
int main(){
stack<int>stk1;
for (int i = 0; i < 10; i++)
stk1.push(i);
print(stk1);
stack<int>stk2(stk1);
print(stk2);
stack<int>stk3;
stk3 = stk1;
stk3.pop();
stk3.push(99);
print(stk3);
cout << "stk3.size()=" << stk2.size() << endl;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416105245238.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x6cTgwOTA=,size_16,color_FFFFFF,t_70)