首先要注意的一点是模板类在VS中编译时如果将定义和声明分开会出现无法解析的问题,所以一般比较常见的解决的办法是将声明和定义放在同一个头文件中然后统一的调用,下面就是用模板类实现线性表的编写
#pragma once #include <iostream> using namespace std; template<class T> class Linearlist { private: T * linear_array;//数组 int array_length;//数组的空间的长度 int array_size;//数组的元素的个数 public: //构造函数和析构函数 Linearlist( int length=10); ~Linearlist() { delete[] linear_array; } //类方法声明 bool empty() { return array_size == 0; } int size() {return array_size;} int get(int num); int insert(int value, int num=-1); int erase(int num); int output(); }; //默认构造函数 template<class T> Linearlist<T>::Linearlist(int length) { linear_array = new T[length]; array_length = length; array_size = 0; } //类方法定义 template<class T> int Linearlist<T>::get(int num) { return linear_array[num]; } template<class T> int Linearlist<T>::insert(int value, int num) { if (num == -1) { if (array_size >= array_length) return 1; linear_array[array_size] = value; array_size++; return 0; } else { if (num > array_length) return 1; if (array_size >= array_length) return 1; copy(linear_array + num, linear_array + array_size , linear_array + num + 1); linear_array[num] = value; array_size++; return 0; } } template<class T> int Linearlist<T>::erase(int num) { if (num > array_length) return 1; copy(linear_array + num + 1, linear_array + array_size , linear_array + num); linear_array[array_size - 1] = 0; array_size--; return 0; } template<class T> int Linearlist<T>::output() { for (int i = 0; i < array_size; i++) { cout << linear_array[i] << " "; } cout << endl; return 0; }
main函数中得调用情况
#include "linearlist.h" int main() { Linearlist<int> temp(20); temp.insert(20); temp.insert(11); temp.insert(13, 1); temp.insert(99, 2); temp.insert(10); temp.erase(1); temp.output(); return 0; }