順序表中的類模板如何實現調用?
可以將模板類SeqList的定義及成員函數的實現代碼全部寫到SeqList.h頭文件中,則在實例化該類后可進行基本的線性表操作
具體的代碼怎么寫,其實核心就是 template<class T> 其中 T 就是一個未知的類型,在寫頭文件時,變量的類型都用T代替。用戶在使用此模板時應該把要使用的變量類型填入進去(可以是基本類型 如 int char 等等 也可以是用戶自定義的復雜類型 如 結構體、類)
下面是SeqList.h頭文件的寫法(這里把實現代碼也寫在了頭文件中)
[cpp] view plain copy
#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED
#include <iostream>
using namespace std;
const int MAX = 1005;
template <class T>
class SeqList{
public:
SeqList(){length = 0;}//無參構造函數
SeqList(const T a[], int n);//有參構造函數,使用含有n個元素的數組a初始化
int GetSeqList(){return length;}//獲取順序表的長度
void PrintSeqList();//按順序打印表中的元素
void Insert(int i, T x);//在順序表的第i個位置插入值為x的新元素
T Delete(int i);//刪除順序表第i個元素,并返回該元素的值
T Get(int i);//獲取順序表第i個元素
int Locate(T x);//查找順序表中值為x的元素,找到后返回其位置
private:
T date[MAX];
int length;
};
template<class T>
SeqList<T>::SeqList(const T a[], int n)
{
if(n > MAX) throw "數組長度超過線性表最大長度" ;
for(int i = 0; i < n; i++)
date[i] = a[i];
length = n;
}
template<class T>
void SeqList<T>::PrintSeqList()
{
cout << "按序號一次遍歷線性表中的各個數據元素:" << endl;
for(int i = 0; i < length; i++)
cout << date[i] << " ";//若數據類型為復雜類型,應當對 << 進行重載
cout << endl;
}
template<class T>
void SeqList<T>::Insert(int i, T x)
{
if(length >= MAX) throw "上溢異常";
if(i < 1 || i > length + 1) throw "位置異常";
for(int j = length; j >= i; j--)
date[j] = date[j-1];
date[i-1] = x;
length++;
}
template<class T>
T SeqList<T>::Delete(int i)
{
if(length == 0) throw "下溢異常";
if(i < 1 || i > length) throw "位置異常";
T x = date[i-1];
for(int j = i; j < length; j++)
date[j-1] = date[j];
length--;
return x;
}
template<class T>
T SeqList<T>::Get(int i)
{
if(i < 1 || i > length) throw "查找位置非法";
return date[i-1];
}
template<class T>
int SeqList<T>::Locate(const T x)
{
for(int i = 0; i < length; i++)
if(x == date[i]) return i + 1;
return 0;//查找失敗
}
#endif // SEQLIST_H_INCLUDED
下面是使用該頭文件
[cpp] view plain copy
#include <iostream>
#include "SeqList.h"
using namespace std;
int main()
{
int a[7] = {1, 2, 3, 4, 5, 6, 7};
SeqList<int> List(a, 7);
List.PrintSeqList();
List.Insert(1, 0);
List.PrintSeqList();
int x = List.Delete(8);
cout << "刪除元素:" << x << endl;
List.PrintSeqList();
int p = List.Locate(4);
cout << "元素4的位置:" << p << endl;
return 0;
}
成都朗沃教育,國內知名的it培訓機構,12年教育培訓經驗!以上是小編的個人見解分享,希望對大家有所幫助,如有不當的地方還請包涵!