【C++精华铺】13.STL stack 和 STL queue 模拟实现

1.序言

        STL (Standard Template Library)是C++标准库提供的一套模板类和算法的集合,其中包含了许多常用的数据结构和算法,方便程序员使用和扩展。STL中的stack和queue是两种常用的容器适配器,可以通过使用不同的容器作为底层实现来提供不同的行为。

  1. STL stack(栈):

    • 栈是一种后进先出(LIFO)的数据结构,只能从容器的一端进行插入和删除操作。
    • STL stack适配器提供了对栈的封装,使用时只需要关注栈的操作,而不需要关心底层容器的实现细节。
    • 栈的常见操作有入栈(push)、出栈(pop)、查看栈顶元素(top)等。
  2. STL queue(队列):

    • 队列是一种先进先出(FIFO)的数据结构,只能从容器的一端进行插入操作,从另一端进行删除操作。
    • STL queue适配器提供了对队列的封装,使用时只需要关注队列的操作,而不需要关心底层容器的实现细节。
    • 队列的常见操作有入队(push)、出队(pop)、查看队首元素(front)、查看队尾元素(back)等。

        STL提供的stack和queue适配器默认使用deque(双端队列)作为底层容器,也可以使用vector或list作为底层容器,根据实际需求选择不同的底层容器以满足性能和功能要求。

        这里我们用vector和queue作为底层容器。

2. STL stack

        太简单,没什么可说的,直接上代码:(用vector作为底层容器)

#pragma once
#include<iostream>
#include<vector>
using namespace std;
namespace zy
{
	template<class T,class Container = vector<T>>
	class stack
	{
	public:
		void push(const T& t)
		{
			_con.push_back(t);
		}
		void pop()
		{
			_con.pop_back();
		}
		const T& top() const
		{
			return _con.back();
		}
		 T& top()
		{
			return _con.back();
		}
		size_t size() const
		{
			return _con.size();
		}
		bool empty() const
		{
			return _con.empty();
		}


	private:
		Container _con;
	};
}

3. STL queue

        同样,直接上代码:(用list作为底层容器)

#pragma once
#include<iostream>
#include<list>
using namespace std;
namespace zy
{
	template<class T, class Container = list<T>>
	class queue
	{
	public:
		void push(const T& t)
		{
			_con.push_back(t);
		}
		void pop()
		{
			_con.pop_front();
		}
		const T& front()
		{
			return _con.front();
		}
		const T& back()
		{
			return _con.back();
		}
		size_t size() const
		{
			return _con.size();
		}
		bool empty() const
		{
			return _con.empty();
		}


	private:
		Container _con;
	};
}

相关推荐

  1. C++精华13.STL stack STL queue 模拟实现

    2024-07-13 02:20:01       21 阅读
  2. C++精华12.STL list模拟实现

    2024-07-13 02:20:01       18 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 02:20:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 02:20:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 02:20:01       58 阅读
  4. Python语言-面向对象

    2024-07-13 02:20:01       69 阅读

热门阅读

  1. MySQL8之mysql-community-server的作用

    2024-07-13 02:20:01       19 阅读
  2. 十大网站助力人工智能学习之路

    2024-07-13 02:20:01       20 阅读
  3. 【SpringBoot】随机盐值+双重SHA256加密实战

    2024-07-13 02:20:01       20 阅读
  4. 【字符串】tire树 kmp

    2024-07-13 02:20:01       21 阅读
  5. 【TVM 教程】使用 TVM 部署框架预量化模型

    2024-07-13 02:20:01       20 阅读
  6. RabbitMq,通过prefetchCount限制消费并发数

    2024-07-13 02:20:01       20 阅读
  7. C#中的泛型

    2024-07-13 02:20:01       18 阅读
  8. 力扣636.函数的独占时间

    2024-07-13 02:20:01       20 阅读
  9. day19打卡

    2024-07-13 02:20:01       16 阅读