C++采用模板技术设计动态数组类 Array

题目要求:

类模板成员包括:数组长度、元素个数、数据指针。
(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;
}








 有什么不懂的大家可以在评论区留言,作为新手的我希望和大家共同讨论,共同进步!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值