C++学习7-实现链表的类模板/vector类模板

本文介绍了如何使用C++实现链表和vector的类模板。详细讲解了类模板的构造,包括链表类模板的创建、vector类模板中涉及的三个指针变量的定义,以及vector容器的默认构造过程,强调了每次扩容时容量翻倍的特性。文章还提到了预留函数和扩容函数在类模板中的应用。
摘要由CSDN通过智能技术生成

模板名+参数列表=类名

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值