这道题本身没什么难度,主要是通过此题练习一下模板的用法(事实上完成此题时还查了一下模板部分的内容)
有两点值得注意:1,颠倒时要用另外一个数组来保存原来的数组。
2.注意是删除所有元素
直接上AC代码:
#include <iostream>
using namespace std;
template <class T>
class SeqList
{
private:
int Length;
T *a;
public:
SeqList(int L);
void change();
void Delete(T x);
~SeqList(){delete []a;}
void Print();
};
template<class T>
SeqList<T>::SeqList(int L)
{
int i;
Length=L;
a=new T[Length];
for (i=0;i<Length;i++)
cin>>a[i];
}
template <class T>
void SeqList<T>::change()
{
int i;
T *b=new T [Length];
for (i=0;i<Length;i++)
b[i]=a[i];
for (i=0;i<Length;i++)
a[i]=b[Length-i-1];
}
template <class T>
void SeqList<T>::Delete(T x)
{
int i,j,sum=0;;
for (i=0;i<Length-sum;i++)
{
if (a[i]==x)
{
for (j=i;j<Length-1-sum;j++)
a[j]=a[j+1];
sum++;
i--;
}
}
Length=Length-sum;
}
template <class T>
void SeqList<T>::Print()
{
int i;
if (Length==0)
cout<<endl;
else
{
for (i=0;i<Length;i++)
cout<<a[i]<<" ";
cout<<endl;
}
}
int main()
{
int n,x1;
char x2;
double x3;
cin>>n;
SeqList<int>A(n);
A.change();
A.Print();
cin>>x1;
A.Delete(x1);
A.Print();
cin>>n;
SeqList<char>B(n);
B.change();
B.Print();
cin>>x2;
B.Delete(x2);
B.Print();
cin>>n;
SeqList<double>C(n);
C.change();
C.Print();
cin>>x3;
C.Delete(x3);
C.Print();
}