stack是一个容器适配器,提供堆栈的功能,是LIFO(last-in,first-out)后进先出数据结构;
stack是对容器deque的包装;
头文件和定义
#include
template<
class T,
class Container = std::deque<T>
> class stack;
stack不支持直接初始化,可以使用拷贝初始化
示例
#include
#include
#include
int main(int argc, char* argv[])
{
//operator= top empty size push emplace pop swap
std::stack<std::string> st;
st.emplace("c");
st.emplace("c++");
//拷贝初始化
std::stack<std::string> st1 = st;
return 0;
}
stack需要先定义再使用,不支持直接初始化等;一般使用的时候,也是先定义再使用;
方法 | 说明 |
---|---|
operator= | 赋值操作 |
top() | 返回栈顶元素,不删除 |
empty() | 判断stack是否为空 |
size() | 返回stack的大小 |
push() | 插入元素 |
emplace() | 插入元素,效率比push高 |
pop() | 删除stack栈顶的元素 |
swap() | 交换两个stack的元素 |
示例
/*
* @brief: stack
* @compile: g++ -g stack_main.cc -o d -std=c++11
* @author: your name
* @date: 2023/04/03
* @lastEditorDate:
*/
#include
#include
#include
int main(int argc, char* argv[])
{
//operator= top empty size push emplace pop swap
//1.元素的插入
std::stack<std::string> st;
st.emplace("c");
st.emplace("c++");
st.push("linux");
st.push("shell");
st.emplace("Rust");
st.push("matlab");
//2.大小输出
std::cout<<"size is: "<<st.size()<<std::endl;
//3.元素的访问
std::cout<<"top element value is: "<<st.top()<<std::endl<<std::endl;
//元素的输出是后进先出
while (!st.empty())
{
std::string str = st.top(); //返回栈顶元素
std::cout<<str<<" ";
st.pop(); //删除栈顶元素
}
std::cout<<std::endl<<std::endl;
//4.swap
std::stack<std::string> st1;
st.swap(st1); //swap之后,st为空
if(st.empty())
{
std::cout<<"empty"<<std::endl;
}
else{
std::cout<<"not empty"<<std::endl;
}
return 0;
}
输出
size is: 6
top element value is: matlab
matlab Rust shell linux c++ c
empty