C++容器适配器——堆栈(stack)

1. 简介

stack是一个容器适配器,提供堆栈的功能,是LIFO(last-in,first-out)后进先出数据结构;
stack是对容器deque的包装;

头文件和定义

#include <stack>

template<
    class T,
    class Container = std::deque<T>
> class stack;

2. 初始化

stack不支持直接初始化,可以使用拷贝初始化
示例

#include <stack>
#include <string>
#include <iostream>

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

3. 使用

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 <stack>
#include <string>
#include <iostream>

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

猜你喜欢

转载自blog.csdn.net/shouhu010/article/details/129927978