0
点赞
收藏
分享

微信扫一扫

C++ queue的使用及模拟实现

迪莉娅1979 2022-04-26 阅读 67

       

目录

queue的简单介绍

queue的使用

queue()

push()

pop()

empty()

size()

front() 

back()

swap()

queue的模拟实现

成员变量

成员函数

bool empty() const

size_t size() const

const T& front() const

T& front() 

const T& back() const

T& back()

void push(const T& x)

void pop()

完整代码

queue.h

测试代码

总结 


queue的简单介绍

以前我用c语言模拟实现过queue,也写过相关的博客,在这里不给各位老铁回顾queue的特征了~

队列的模拟实现(单链链表模拟)_暴走的橙子~的博客-CSDN博客

在这里我们来翻译一下C++文档来了解一下:

queue的使用

queue()

举个栗子:

int main()
{
	queue<int> q;
	return 0;
}

我们来调试一下看看情况:

push()

举个栗子:

int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	return 0;
}

我们来调试一下看看情况:

pop()

举个栗子:

int main()
{
	queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.pop();
	q.pop();
	return 0;
}

我们调试一下看看这个过程:

empty()

举个栗子:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	cout << q1.empty() << endl;

	queue<int> q2;
	cout << q2.empty() << endl;
	return 0;
}

运行结果:

size()

举个栗子:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	cout << q1.size() << endl;

	queue<int> q2;
	cout << q2.size() << endl;
	return 0;
}

运行结果:

front() 

举个栗子:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	cout << q1.front() << endl;

	int& p = q1.front();
	p = 10;
	cout << q1.front() << endl;
	return 0;
}

运行结果:

back()

举个栗子:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	cout << q1.back() << endl;

	int& p = q1.back();
	p = 30;
	cout << q1.back() << endl;
	return 0;
}

运行结果:

swap()

 

举个栗子:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);

	queue<int> q2;
	q2.push(10);
	q2.push(20);
	q2.push(30);

	q1.swap(q2);

	while (!q1.empty())
	{
		cout << q1.front() << " ";
		q1.pop();
	}
	cout << endl;
	while (!q2.empty())
	{
		cout << q2.front() << " ";
		q2.pop();
	}
	return 0;
}

运行结果:

queue的模拟实现

成员变量

template<class T,class Container = deque<T>>
private:
Container _con;

成员函数

bool empty() const

bool empty() const
{
	return _con.empty();
}

size_t size() const

size_t size() const
{
	return _con.size();
}

const T& front() const

const T& front() const
{
	return _con.front();
}

T& front() 

T& front() 
{
	return _con.front();
}

const T& back() const

const T& back() const
{
	return _con.back();
}

T& back()

T& back()
{
	return _con.back();
}

void push(const T& x)

void push(const T& x)
{
	_con.push_back(x);
}

void pop()

void pop()
{
	_con.pop_front();
}

完整代码

queue.h

#pragma once
#include<deque>
#include<iostream>
using namespace std;

namespace cyq
{
	template<class T,class Container = deque<T>>
	class queue
	{
	public:
		bool empty() const
		{
			return _con.empty();
		}
		size_t size() const
		{
			return _con.size();
		}
		const T& front() const
		{
			return _con.front();
		}
		T& front() 
		{
			return _con.front();
		}
		const T& back() const
		{
			return _con.back();
		}
		T& back()
		{
			return _con.back();
		}
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_front();
		}
	private:
		Container _con;
	};
}

测试代码

int main()
{
	cyq::queue<int> q;
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);

	cout << q.size() << endl;
	cout << "队尾数据:" << q.back() << endl;
	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
	cout << endl;
	return 0;
}

运行结果:

总结 

        我们发现C++中stack和queue的模拟实现都使用了容器适配器,很好地体现了复用的原则。通过模板可以让编译器自动推导存储的数据类型,这体现了泛型编程的特点。

可以通过与C语言中模拟实现队列来进行比较,看看其中代码的差距体现。在最上面有博客的链接~

看到这里,给博主支持一下吧~

     

举报

相关推荐

0 条评论