题目要求:
类模板成员包括:数组长度、元素个数、数据指针。
(3)通过构造函数创建数组默认包含10个元素,通过析构函数释放数组数据。
(4)添加数组元素:int AddItem(T aData); 返回类型为添加元素的下标号,如果数组长度不够,需要动态扩展。
(5)删除数据元素:bool RemoveAt(int index); 返回是否删除成功。
(6)插入数组元素 void InsertItem( int index, T aData); 在数组的第index的位置插入元素aData。
(7)数组元素选择排序,void SelectSort();
代码如下:
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
template<class T>
class Array
{
protected:
T *alist;//数组指针
int size;//数组大小
int length;//数据个数
public:
Array(T qq[],int sz) //构造函数
{
length=sz; //length接收数据个数
size=10; //默认数组大小为10
alist = new T[size]; //为数组开辟空间
T *ww=qq;
for(int i=0;i<length;i++)
{
alist[i]=ww[i];
}
if(alist == NULL) //如果分配资源不成功
return;
}
int AddItem(T aData);
bool RemoveAt(int index);
void InsertItem( int index, T aData);
void SelectSort();
void print();
};
template<class T>//添加元素
int Array<T>::AddItem(T aData)//aData为添加的元素,添加至尾部
{
if(length<size)
{
alist[length]=aData;
length++;
}
else
{
T *np;
int i;
np=new T[size+10]; //为np开辟一个20大小的空间
for(i=0;i<length;i++)
{
np[i]=alist[i]; //np先存放alist中的数据
}
np[length]=aData; //添加数据
length++;
delete alist;
alist=new T[size+10]; 为alist开辟一个更大的空间
for(i=0;i<length;i++)
{
alist[i]=np[i]; //把np数组赋值给alist
}
return length-1;
}
template<class T>
bool Array<T>::RemoveAt(int index)//删除第几个数据
{
if(index>=size||index<0)
return 0;
else
{
for(int i=index-1;i<length-1;i++)
{
alist[i]=alist[i+1]; //把数据往前移
}
alist[length-1]=NULL;
length--;
return 1;
}
}
template<class T>//插入元素
void Array<T>::InsertItem(int index,T aData)//插入下标
{
int i;
/*for(i=0;i<index-1;i++)
{
cout<<alist[i]<<" ";
}*/
//cout<<aData;
for(i=length-1;i>=index;i--)
{
alist[i+1]=alist[i]; //从后往前,数据往后移一位
}
alist[index]=aData;
length++;
}
template<class T>
void Array<T>::SelectSort() //排序数组
{
T t;
for(int i=0;i<length-1;i++)
{
for(int j=0;j<length-1-i;j++)
{
if(alist[j]>alist[j+1])
{
t=alist[j];
alist[j]=alist[j+1];
alist[j+1]=t;
}
}
}
}
template<class T>
void Array<T>::print() //输出
{
for(int i=0;i<length;i++)
{
cout<<alist[i]<<" ";
}
}
int main()
{
int a,i,lll,ind,inde,aData;
cin>>a;
int aa[10];
for(i=0;i<a;i++)
{
cin>>aa[i];
}
Array<int> s(aa,a);
cout<<"构造后的数组 "<<endl;
s.print();
cout<<"添加元素 ";
cin>>lll;
cout<<"添加元素的下标 "<<s.AddItem(lll)<<endl;
s.print();
cout<<"删除dijige元素 ";
cin>>ind;
if(s.RemoveAt(ind)==1)
cout<<"删除成功 "<<endl;
else if(s.RemoveAt(ind)==0)
cout<<"删除失败 "<<endl;
cout<<"删除下标元素后的数组 "<<endl;
s.print();
cout<<"添加下标和元素后的数组 "<<endl;
cin>>inde>>aData;
s.InsertItem(inde,aData);
s.print();
cout<<"排序后的数组 "<<endl;
s.SelectSort();
s.print();
system("pause");
return 0;
}
有什么不懂的大家可以在评论区留言,作为新手的我希望和大家共同讨论,共同进步!