C++ stack 的使用

目录

[1. 无参构造函数](#1. 无参构造函数)

[2. void push(const T& x)](#2. void push(const T& x))

[3. void pop()](#3. void pop())

[4. T& top()](#4. T& top())

[5. bool empty()](#5. bool empty())

[6. size_t size()](#6. size_t size())

[7. 总结](#7. 总结)


  1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。

  2. stack是作为容器适配器被实现的,容器适

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	return 0;
}

配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

  1. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下 操作: empty:判空操作 back:获取尾部元素操作 push_back:尾部插入元素操作 pop_back:尾部删除元素操作

  2. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器, 默认情况下使用deque。

上面的内容仅作了解,具体的理解过程会在 stack 的模拟实现部分讲解。

1. 无参构造函数

在 stack 底层,其实使用 STL 的一种容器适配出来的 stack。stack 的无参构造是用得最多的!当然 stack 肯定是有拷贝构造的撒!

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	return 0;
}

2. void push(const T& x)

这个函数可以向栈顶插入一个元素。

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	return 0;
}

3. void pop()

这个元素也很简单,就是弹出栈顶的元素!

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.pop();
	return 0;
}

4. T& top()

返回栈顶的元素。

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);

	cout << st.top() << endl; //输出:3
	return 0;
}

5. bool empty()

个函数可以判断一个栈是否为空!为空返回 true,不为空返回 false。

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);

	cout << st.empty() << endl; //输出:0
	return 0;
}

6. size_t size()

返回栈中元素的个数。

cpp 复制代码
#include<iostream>
#include<stack>

using namespace std;

int main()
{
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);

	cout << st.size() << endl; //输出:3
	return 0;
}

7. 总结

栈是没有迭代器的,他不支持遍历数据。栈只是一种规定了数据插入,删除方式的一种容器。十分简单呢!

相关推荐
学习编程的gas2 分钟前
C++面向对象编程入门:从类与对象说起(一)
开发语言·c++
冼紫菜3 分钟前
【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
java·开发语言·mybatis
Bear on Toilet35 分钟前
Bug日记——实现“日期类”
开发语言·c++·bug
apcipot_rain39 分钟前
《面向对象程序设计-C++》实验五 虚函数的使用及抽象类
开发语言·c++
明月看潮生3 小时前
青少年编程与数学 02-019 Rust 编程基础 05课题、复合数据类型
开发语言·青少年编程·rust·编程与数学
幼稚诠释青春3 小时前
Java学习笔记(对象)
java·开发语言
zhczzm3 小时前
深入浅出之STL源码分析2_stl与标准库,编译器的关系
c++
Wyc724094 小时前
JDBC:java与数据库连接,Maven,MyBatis
java·开发语言·数据库
强化学习与机器人控制仿真4 小时前
Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出
开发语言·人工智能·python·stm32·深度学习·机器人·自动驾驶
芯片SIPI设计5 小时前
MIPI C-PHY 标准学习----一种通用多信号传输方案
c语言·开发语言·学习