c++stack和list 介绍

stack介绍

堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中运行,其中元素仅从容器的一端插入和提取。

堆栈作为容器适配器实现,容器适配器 是使用特定容器类的封装对象作为其基础容器 的类 ,提供一组特定的成员函数来访问其元素。元素从特定容器的 "back" 推送弹出 ,这称为堆栈的顶部

stack接口

stack() 构造空的栈

empty() 检测stack是否为空

size() 返回stack中元素的个数

top() 返回栈顶元素的引用

push() 将元素val压入stack中

pop() 将stack中尾部的元素弹出

stack的模拟实现

在c++中,模拟实现stack较C语言简单许多,因为库里提供了vector和list的接口,实现起来少了很多复杂的步骤

在模拟实现的过程中可以使用模板类,能够应对不同类型的数据

cpp 复制代码
template<class T,class Con=deque<T>>

这里我们在创建模板的时候使用两个类型,T代表了数据的类型,Con为实现的方式,默认传参为deque。

cpp 复制代码
Con _c;

这是类中的变量,_c的类型有几种可能:vector,list,deque。

插入

cpp 复制代码
void push(const T& x)
{
	_c.push_back(x);
}

这里我使用头部为栈底,实现的时候只需要调用库里的尾插函数即可。

删除

cpp 复制代码
void pop()
{
	_c.pop_back();
}

这里我们直接使用尾删函数即可。

取栈顶数据

cpp 复制代码
T& top()
{
	return _c[_c.size() - 1];
}

直接返回size前一个位置的数据即是栈顶数据。

数据个数

cpp 复制代码
size_t size()const
{
	return _c.size();
}

直接调用_c的size接口即可完成。

判空

cpp 复制代码
bool empty() const
{
	return _con.empty();
}

调用_c的判空接口。

queue介绍

  1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元 素,另一端提取元素。

  2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供 一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

queue接口

queue() 构造空的队列

empty() 检测队列是否为空,是返回true,否则返回false

size() 返回队列中有效元素的个数

front() 返回队头元素的引用

back() 返回队尾元素的引用

push() 在队尾将元素val入队列

pop() 将队头元素出队列

queue模拟实现

因为queue的接口中存在头删和尾插,因此使用vector来封装效率太低,故可以借助list来模拟实现queue。

实现过程也与stack差不多,借用库函数可以省去很多时间。

cpp 复制代码
template<class T,class con=deque<T>>

这里的con默认使用deque,同样也可以使用list。

判空

cpp 复制代码
bool empty()
{
	return _c.size() == 0;
}

数据个数

cpp 复制代码
size_t size()
{
	return _c.size();
}

队头数据

cpp 复制代码
const T& front() const
{
	return _c[_c.size() - 1];
}

队尾数据

cpp 复制代码
const T& back()const
{
	return _c[0];
}

插入

cpp 复制代码
void push(const T& x)
{
	_c.push_front(x);
}

删除

cpp 复制代码
void pop()
{
	_c.pop_back();
}
相关推荐
地平线开发者7 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥7 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog7 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008118 小时前
FastAPI APIRouter
开发语言·python
Benszen8 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆8 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木8 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
我叫袁小陌8 小时前
算法解题思路指南
算法
MC皮蛋侠客8 小时前
C++17 多线程系列(五):C++17 并行算法——从串行到并行的零成本迁移
c++·多线程
地平线开发者8 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶