本帖最后由 鸦领主 于 2021-1-31 20:31 编辑
1、C++模板技术也叫泛型技术:
泛型就是使用的类型是各种类型,运算过程相同。
在模板技术出现之前,主要使用define和重载函数实现泛型。
2、函数模板定义:
template <class 模板变量>
template <typename 模板变量>//俩个都是一样定义哪一个都行
返回值函数(模板变量...)
3、模板函数的调用:
a)标准调用:
函数名<模板类型>(参数列表);
根据指定模板类型生成对应的函数。
b)非标准调用:根据参数类型自动识别生成一个新的类型的函数。
函数名(参数列表);
2.俩个小的数据结构
栈的数据结构
栈是线性结构,特点是先进后出
输入12345.输出就是54321
#pragma once
template<typename DATA>//模板
class CStack
{
DATA *m_pdata;
int nTop;
int m_Count;
public:
CStack(int count=5)//缺省是5
{
m_pdata = new DATA[count];
nTop = 0;
m_Count = count;
}
~CStack()
{
delete[]m_pdata;
}
bool isFull()//判断栈是否满了
{
return nTop >= m_Count;
}
void push(const DATA& data)//入栈
{
if (!isFull())
m_pdata[nTop++] = data;
}
bool isEmpty()//判断栈是否空了
{
return nTop == 0;
}
bool pop(DATA& data)//出栈
{
if (isEmpty())
return false;
data = m_pdata[--nTop];
return true;
}
};
<div>
</div><div>队列的数据结构</div><div>队列是线性结构,先进先出环形结构,需要多余出来一个位置
template<typename DATA>//模板
class Queue //队列
{
DATA* m_pdata;
int m_nHead, m_nTail;
int m_Count;
public:
Queue(int count = 5)
{
m_pdata = new DATA[count];
m_nHead = m_nTail = 0;
m_Count = count + 1;//加1是多余出来一个位置
}
bool isFull()//判断是否满了//②再次进入判断此时Tail是0+1,Count是6,余数是1,1==2不符合可以进入if ,③此时Tail是1+1,Count是6,余数是2,2==2不能进入if 而m_nTail[1]将会变成新的空位
{ //①当你要输入5次的话,因为下面有一个count+1那么就是6,那么m_nTail会加加5次,将5个内容一次送入目的也达到了,
return (m_nTail + 1)%m_Count == m_nHead; //①此时m_nTail是5+1(加1是不让多出的位置用掉) 余6,余数是0和m_Head相等,就不再会进入if里面了
} //②如果用pop取出俩个数字,那么m_nHead会加俩次变成2, 0==2的就不会成立,将再次进入if
void push(const DATA& data)//入栈
{
if (!isFull())
{//②取出来的数字将会赋值到多余的位置上也就是m_pdata[5]上面
m_pdata[m_nTail] = data; //将内容赋值给m_pdata[0],m_pdata[1]...m_pdata[4]②data将会赋值给m_pdata[0]
m_nTail = ++m_nTail % m_Count;//②这一步6%6余数0赋值给m_Taill ③Tail加加会变成1
}
}
bool isEmpty()//判断是否空了
{
return m_nHead == m_nTail;
}
bool pop(DATA& data)//出栈
{
if (isEmpty())//第一次进入m_nHead(2)==m_nTail(1)不成立不进入 第四次进入m_nHead(5)==m_nTail(1)不成立不进入 第六次进入m_nHead(5)==m_nTail(1) 最后一次1==1不再进入if
return false;
data = m_pdata[m_nHead];//第一次将m_pdatap[2]内容赋值给data 第五次m_pdatap[5]内容赋值给data 第六次m_pdatap[0]内容赋值给data
m_nHead = ++m_nHead % m_Count;//第一次++m_nHead(3)%m_Count(6)余数为3赋值给m_nHead 第五次++m_nHead(6)%m_Count(6)余数为0赋值给m_nHead 第六次++m_nHead(1)%m_Count(6)余数为1赋值给m_nHead
return true;
}
};</div>
C++ 模板 栈和队列的数据结构
C++ 模板 栈和队列的数据结构
|