模板名+参数列表=类名
实现链表的类模板/vector类模板
1.实现链表的类模板
// text1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
using namespace std;
//用链表写一个类模板
template<typename T=int>
class Link // 类模板名称
{
public:
Link()
{
mphead = new Node();
}
~Link()
{
Node *cur = mphead;
while (mphead != nullptr)
{
mphead = mphead->mpnext;
delete cur;
cur = mphead;
}
}
void insertHead(const T &val)
{
Node *ptmp = new Node(val);//新建一个带参数值的结点 ptmp指向新结点
ptmp->mpnext = mphead->mpnext;
mphead->mpnext = ptmp;
}
void insertTail(const T &val)
{
Node *cur = phead;
while (cur->mpnext != nullptr)//只有找尾结点才判断当前节点的下一个是不是空 因为尾结点是空的
{
cur = cur->mpnext;
}
cur->mpnext = new Node(val);
}
void remove(const T &val) // 删除所有值为val的节点
{
Node *precur = phead;
Node *aftercur = phead->mpnext;
while (aftercur->mpnext != nullptr)
{
if (aftercur->mdata == val)
{
precur->mpnext = cur->mpnext;
delete cur;
aftercur = aftercur->mpnext;//再删除完要删除的节点后 把当前after的指针放到后面去
}
else
{
precur = aftercur;
aftercur = aftercur->mpenext;
}
}
}
void show()
{
Node *cur = mphead->mpnext;
while (pcur != nullptr)
{
cout << pcur->mdata << " ";
cur = cur->mpnext;
}
cout << endl;
}
private:
struct Node
{
Node(T data=T())//给Node提供构造函数!!在这个里面进行 mdata mpnext的初始化
:mdata(data)//T data=T() 可以让这个变成默认构造 不带参数的那种
,mpnext(nullptr)
{
}
T mdata;
Node *mpnext;
};
Node *mphead; // 指向头节点的指针
};
int main()
{
Link<int> intlink;
Link<double> doublelink;
Link<> intlink2;//写成这样template<typename T=int>就可以不写参数
return 0;
}
2.实现vector类模板(变量定义的三个指针)
类模板中,可以把构造函数析构函数的<>省略,其他的就尽量不要省略了
// text1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
using namespace std;
template<typename T>
class vector
{
public:
vector(int size = 10)
{
first = new T[size];//指针要用T来初始化
last = first;
end