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;
}