C++模板类实现顺序表相较c语言实现,
表的创建和销毁可以构造与析构函数管理。
定义表的长度、容量以及内存数组可以用私有成员实现,替代c语言中的结构体定义。
c定义: 定义表的结构体
typedef struct _tag_SeqList
{
int length;
int capacity;
unsigned int **node;
}TSeqList;
其二是在操作函数中因为类中有隐藏的this指针,所以省去了传送表的地址。函数中可以直接调用私有成员来获取信息。
再有是外部数据节点交互可通过传引用实现而不用指针。
SeqList.h
#pragma once
template <typename T>
class SeqList
{
public:
SeqList(int Capacity);
~SeqList();
int getLen();
int getCapacity();
int insert( T &t, int pos);
int get(int pos, T &t); //直接传引用,不需要返回节点了
int del(int pos, T &t);
private:
int length;
int capacity;
T *pArray; //数组
};
注意添加类模板关键语句
template <typename T>
SeqList.cpp
#include "SeqList.h"
template <typename T>
SeqList<T>::SeqList(int Capacity) //注意泛型编程格式
{
pArray = new T[Capacity];
this->capacity = Capacity;
this->length = 0;
}
template <typename T>
SeqList<T>::~SeqList()
{
delete[]pArray;
pArray = NULL;
length = 0;
capacity = 0;
}
template <typename T>
int SeqList<T>::getLen()
{
return length;
}
template <typename T>
int SeqList<T>::getCapacity()
{
return capacity;
}
template <typename T>
int SeqList<T>::insert(T &t, int pos)
{
int i = 0;
if (pos < 0)
{
return -1;
}
for (i = length; i > pos; i--)
{
pArray[i] = pArray[i - 1];
}
pArray[i] = t; //Stl元素保存时通过复制的机制实现,设计的类要能复制才行
length++;
return 0;
}
template <typename T>
int SeqList<T>::get(int pos, T &t) //直接传引用,不需要返回节点了
{
if (pos < 0)
{
return -1;
}
t = pArray[pos];
return 0;
}
template <typename T>
int SeqList<T>::del(int pos, T &t)
{
int i = 0;
if (pos<0 || pos>length)
{
return -1;
}
t = pArray[pos];
for (i = pos + 1; i < length; i++)
{
pArray[i - 1] = pArray[i];
}
length--;
return 0;
}