第九层(5):STL之stack

简介: 第九层(5):STL之stack

前情回顾


上一块石碑,我学到了deque容器内函数的基本使用,同时下一块石碑也显露出来…


🚄上章地址:第九章(4):STL之deque


stack


概念


stack容器是栈容器,同时它也拥有栈一样的性质,先进后出。


0a2653c851af460fa595bd959398a8f1.png


stack容器需要注意的地方


stack容器是先进后出的数据结构,它能被访问到的只有栈顶,因此栈不可以被遍历,遍历属于非质变算法,因为栈只能访问到第一个元素,当遍历的时候,访问到第一个,访问第二个的时候,就得先把第一个取出来,让第二个变成栈顶,这个时候就属于是质变算法,就不属于遍历的范围了,但是栈是可以用size函数来返回栈内有多少个元素个数的,那是为什么呢?不能取出,不能遍历,用什么方法来统计内部元素?其实可以在进栈的时候统计,进去一个加一,出栈出去一个减一。


stack类内的构造函数


stack是只有默认构造和拷贝构造的

stack< T >;//默认构造
stack(const stack& s);//拷贝构造函数,可以将s的数据拷贝到本身


使用:


#include<stack>
#include<iostream>
using namespace std;
void test1()
{
  stack<int> s;
  s.push(1);
  stack<int> s1(s);
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


stack类内的赋值操作


stack中的赋值操作只有一种

stack& operator=(const stack &s);//操作符重载,将s的数据拷贝到本身


使用:


#include<stack>
#include<iostream>
using namespace std;
void test1()
{
  stack<int> s;
  s.push(2);
  cout << s.top() << endl;
  stack<int> s1;
  s1 = s;
  cout << s1.top()<<endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


stack类内的插入


因为stack容器只能访问到栈顶,插入数据也只能从栈顶插入,所以stack就只有一种插入方式

push(T elem);//向栈顶插入元素


使用:


#include<stack>
#include<iostream>
using namespace std;
void test1()
{
  stack<int> s;
  s.push(2);
  cout << s.top() << endl;
}
int main()
{
  test1();
  return 0;
}

2d65d23f6d4748949b924e4057485923.png


stack类内的删除


同插入,只能访问到栈顶,所以只有一种删除方式

pop();//从栈顶删除第一个元素


使用:


#include<stack>
#include<iostream>
using namespace std;
void test1()
{
  int i = 2;
  stack<int> s;
  while (i--)
  {
  s.push(i);
  }
  cout << s.top() << endl;
  s.pop();
  cout << s.top() << endl;
}
int main()
{
  test1();
  return 0;
}

2e9b90b2ca334476abebe75bafe6eeaa.png


stack类内的访问


和插入删除一样,只能访问到栈顶元素,使用只有一种访问方式

top();//访问栈顶元素


使用:


#include<stack>
#include<iostream>
using namespace std;
void test1()
{
  stack<int> s;
  s.push(1);
  cout << s.top() << endl;
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


stack类内的大小操作


在注意中提到,stack可以用size返回类内元素的多少,那除了size还有其他的函数可以进行操作吗?有,empty可以用来判断栈是否为空

empty();//用于判断栈是否为空,如果是空返回真
size();//返回栈内元素个数


使用:


#include<stack>
#include<iostream>
using namespace std;
void test1()
{
  stack<int> s;
  if (s.empty())
  {
  cout << "s为空" << endl;
  }
  cout << s.size() << endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


下一座石碑


这座石碑倒下了,露出了下一座石碑…


😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔

🚀专栏:C++爬塔日记

🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉


相关文章
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1084 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1751 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
694 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
660 14
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
438 5