对栈(pair_stack)与对队(pair_queue)的实现

发布于:2022-12-17 ⋅ 阅读:(332) ⋅ 点赞:(0)

这两个术语不用去查了,我自己发明的。

对栈

(用模板类实现)

/* pair_stack */
template<typename _Tym,typename _Tpn>
class pair_stack
{
	private:
	stack<pair<_Tym,_Tpn>> pstack;
	public:
	void pop()//弹出栈顶元素 
	{
		return pstack.pop();
	}
	void push(pair<_Tym,_Tpn> _Element)//加入元素 
	{
		pstack.push(_Element);
		return;
	}
	void push(_Tym First_Element,_Tpn Second_Element)//重载 
	{
		pstack.push(make_pair(First_Element,Second_Element));
		return;
	}
	bool empty()
	{
		return pstack.empty();
	}
	unsigned int size()
	{
		return pstack.size();
	}
	pair<_Tym,_Tpn> top()
	{
		return pstack.top();
	}
};

不要问我为什么不写swap函数,因为我写过了,但是太难了,写出来变反的了……

对队

(用模板类实现)

/* pair_queue */
template<typename _Tym,typename _Tpn>
class pair_queue
{
	private:
	queue<pair<_Tym,_Tpn>> pqueue;
	public:
	void pop()//出队 
	{
		return pqueue.pop();
	}
	void push(pair<_Tym,_Tpn> _Element)//入队 
	{
		pqueue.push(_Element);
		return;
	}
	void push(_Tym First_Element,_Tpn Second_Element)//重载 
	{
		pqueue.push(make_pair(First_Element,Second_Element));
		return;
	}
	bool empty()
	{
		return pqueue.empty();
	}
	unsigned int size()
	{
		return pqueue.size();
	}
	pair<_Tym,_Tpn> front()
	{
		return pqueue.front();
	}
	pair<_Tym,_Tpn> back()
	{
		return pqueue.back();
	}
};

模板类是什么

以下内容摘编自百度百科。​​​​​​​

概述

模板类是根据参数类型生成函数和类的机制(有时称为“参数决定类型”)。

简介

通过使用模板,可以只设计一个类来处理多种类型的数据,而不必为每一种类型分别创建类。

优势

创建一个类型安全函数来返回两个参数中较小的一个,如果不使用 template,必须要编写一系列如下的函数:

// min for int

int min( int a, int b )
{
    return ( a < b ) ? a : b;
}

// min for long

long long min( long long a, long long b )
{
    return ( a < b ) ? a : b;
}

// min for char

char min( char a, char b )
{
    return ( a < b ) ? a : b;
}

使用templates,可以减少重复部分,形成一个函数:

template <class type>
type min( type a, type b )
{
    return ( a < b ) ? a : b;
}

模板能够减少源代码量并提高代码的机动性而不会降低类型安全。

何时使用模板

模板经常被用来实现如下功能:

>> 创建一个类型安全的集合类(例如,堆栈)用来处理各种类型的数据

>> 为函数添加额外的类型检查以避免获得空指针

>> 合并操作符重载组来修改类型行为(例如智能指针smart pointer)

大多数以上应用可以不用模板实现;但是,模板具有以下几个优势:

>> 开发容易。你可以只为你的类或函数创建一个普通的版本代替手工创建特殊情况处理。

>> 理解容易。模板为抽象类型信息提供了一个直截了当的方法。

>> 类型安全。模板使用的类型在编译时是明确的,编译器可以在发生错误之前进行类型检查。

 原创不易,点赞关注后再走吧……


网站公告

今日签到

点亮在社区的每一天
去签到