#include
using namespace std;
template
class mylinearlist
{
private:
int length;
int Maxsize;
T* element;
public:
mylinearlist::mylinearlist() : length(0), Maxsize(20)
{
element = new T[Maxsize];
}
mylinearlist<T>::mylinearlist(int l, int M) : length(l), Maxsize(M)
{
element = new T[Maxsize];
}
mylinearlist<T>::~mylinearlist()
{
delete[]element;
//element = null;
}
//增:将元素x插入到线性表的第k个位置。
mylinearlist<T> & mylinearlist<T>::Insert(int k, const T & x)
{
if (k < 1 || k > length + 1)//保持线性表的特性。
{
cout << "元素下标越界,无法保持线性表的特性而插入失败" << endl;
}
else
if (length == Maxsize)
{
cout << "线性表已满,无法添加新元素,插入失败" << endl;
}
else
for (int i = length; i > k - 1; i--)
{
element[i] = elemnt[i - 1];//元素从后往前移,第i个(数组下标i-1)移到第i+1个.因为要将第k个元素移到第k+1的位置,即数组第k+1个位置赋值为第k个元素
}
element[k - 1] = x;
length++;
return *this;
}
//删:删除线性表第k个元素,将其保存到x中,并返回删除后的线性表。
mylinearlist<T> & mylinearlist<T>::Delete(int k, T & x)
{
if (Getdata(k, x) == 0)
{
cout << "数组第k个位置出现越界而删除失败" << endl;
}
else
{
for (int i = lebngth; i > i - k; i--)
{
element[i - 1] = element[i - 2];
}
length--;
return *this;
}
}
//改:将线性表第k个位置的元素修改为x。
mylinearlist<T> & mylinearlist<T>::ModifyData(int k, const T & x)
{
if (Getdata(k, x) == 0)
{
cout << "数组第k个位置出现越界而查找不到修改失败" << endl;
}
else
{
element[k - 1] = x;
}
}
//查:查询第k个元素。
bool & mylinearlist<T>::Getdata(int k, T & x)
{
if (k < 1 || k > length)
{
cout << "元素下标越界,访问失败" << endl;
return false;
}
else
{
x = element[k - 1];
return ture;
}
}
//判断线性表是否为空。
bool mylinearlist::IsEmpty(int k, T & x) const
{
return length == 0;
}
int mylinearlist<T>::Getlength() const
{
return length;
}
int mylinearlist<T>::GetMaxsize() const
{
return Maxsize;
}
//查询元素x在表中的位置,不在则返回0。
int mylinearlist<T>::Find(const T& x)
{
for (int i = 0; i < length; i++)
{
if (element[i] == x)
{
return i + 1;
}
}
return 0;//1.不在则返回0;2.函数return后就会结束?
}
//编写将线性表全部元素放到输出流out中输出的成员函数
void mylinearlist<T>::output(ostream & out)const
{
for (int i = 0; i < length; i++)
{
out << element[i] << endl;
}
}
//重载输出运算符,调用线性表类型对象成员函数output将放在输出流out中的线性表元素输出。
friend ostream & operator<<(ostream& out, const mylinearlist<T> & x)
{
x.output(out);
return out;
}
};
#include
#include"linearlist.h"
using namespace std;
int main()
{
mylinearlist x;
cout << x.Getlength() << endl;
cout << x.GetMaxsize() << endl;
mylinearlist y(1, 20);
cout << y.Getlength() << endl;
return 0;
}
int mylinearlist::Getlength() const
{
return length;
}
int mylinearlist<T>::GetMaxsize() const
{
return Maxsize;
}
//查询元素x在表中的位置,不在则返回0。
int mylinearlist<T>::Find(const T& x)
{
for (int i = 0; i < length; i++)
{
if (element[i] == x)
{
return i + 1;
}
}
return 0;//1.不在则返回0;2.函数return后就会结束?
}
//编写将线性表全部元素放到输出流out中输出的成员函数
void mylinearlist<T>::output(ostream & out)const
{
for (int i = 0; i < length; i++)
{
out << element[i] << endl;
}
}
//重载输出运算符,调用线性表类型对象成员函数output将放在输出流out中的线性表元素输出。
friend ostream & operator<<(ostream& out, const mylinearlist<T> & x)
{
x.output(out);
return out;
}
};
#include
#include"linearlist.h"
using namespace std;
int main()
{
mylinearlist x;
cout << x.Getlength() << endl;
cout << x.GetMaxsize() << endl;
mylinearlist y(1, 20);
cout << y.Getlength() << endl;
return 0;
}
1.因为你定义的是类模板,使用的时候要用一个具体类型实例化模板。比如 mylinearlist<int> lst;
2.模板的定义也有问题。