利用模板类实现功能

动态数组的创建

template<class Type>
GenericArray<Type>::GenericArray(int length):size(length),count(0)
{
	items=new Type[size];
}

使用模板定义替换GenericArray声明,使用模板成员函数替换GenericArray的成员
函数。定义一个空数组,初始化数组长度。

template<class Type>
void GenericArray<Type>::printArr()const
{
  for (int i = 0; i < count; i++)
  	cout << items[i] << '\t';
  cout << endl;
}

实现对数组的输出,当数组中存在数据即count>0时,输出该数组中的元素。

template<class Type>
void GenericArray<Type>::HeadAddArr(Type ar)
{
	if(!isfull())
	{
		count++;
		for(int i=count;i>0;i--)
		{
			items[i] = items[i-1];//将最后一个数据赋给后面一个空数据
		}		
		items[0] = ar;//对第一个数据赋值
	}
}

实现头元素的添加功能,即对数组头进行插值,当数组非满即可添加元素,当
插入头元素时,要先将最后一个元素赋给下一个空数据,然后一一向后赋值,即将
上一个数组赋给下一个数组,最后将Type类的数据赋给数组第一个元素即可。

template<class Type>
void GenericArray<Type>::MidAddArr(int index, Type elem)
//函数参数为索引和插入的元素
{
	if(!isfull())
	{
		count++;
		for (int i = count; i>index; i--)
		{
			items[i] = items[i - 1];
		}
		items[index] = elem;
	}
}

中间插值,先根据索引找到对应元素的下标值,通过指针找到对应元素的地址,按
照上述头元素插值的方法,将0换成索引index即可。

template<class Type>
void GenericArray<Type>::TailAddArr(Type elem)
{
	if(!isfull())
	{
		count++;
		items[count-1]=elem;
	}
}

尾部插值就较容易了,先判断数据是否非满,满足条件通过指针找到最后一个数
据的下一个位置对其赋值即可,记得都要对数据进行更新。

template<class Type>
void GenericArray<Type>::DelHeadArr()
{
	if(!isempty())
	{
		for(int i=0;i<count;i++)
			items[i]=items[i+1];
		count--;
	}
}
template<class Type>
void GenericArray<Type>::DelMidArr(int index)
{
	if(!isempty()&&index<count-1)
	{
		for(int i=index;i<count-1;i++)
			items[i]=items[i+1];
		count--;
	}
}
template<class Type>
void GenericArray<Type>::DelTailArr()
{
	if(!isempty())
		count--;
}

实现对数组头、尾、索引的删除操作,方法与插入类似,不同的是要将数
据移,比如对第一个数据的删除操作,直接将下一个数据赋值给上一个数据即
可,对于中间数据的删除操作,则是根据索引值找到对应元素的位置,然后从
这个位置开始对后面的数据进行数据操作,对头和尾的删除是对索引元素删除
的特例。

template<class Type>
void GenericArray<Type>::getArr(int index)
{
	if (!isempty() && index < count)
		cout << items[index] << endl;
}

获取索引元素,若数组非空,索引值不超出数据存在范围,即可直接找到对应的
数组元素。

template<class Type>
void GenericArray<Type>::modArr(int index, Type elem)
{
	if (!isempty() && index < count)
		items[index] = elem;
	cout << items[index] << endl;
}

索引修改元素,直接根据索引值找到该元素并对其赋值即可。

template<class Type>
void GenericArray<Type>::judArr(Type elem)
{
	int index=0;
	if (!isempty())
	{
		for (int i = 0; i < count; i++)
		{
			if (items[i] == elem)
				index = i;
		}
		cout << index << endl;
	}
}

判断数组是否包含某元素,将该数据与数组中的数据一一比较输出对应下标即可。

int main()
{
  GenericArray<int>arr(5);//定义一个GenenricArray类arr,arr类成员index指向一个大小为5的整型数组
  //GenericArray<double>arr1;
  arr.HeadAddArr(2);
  arr.HeadAddArr(1);
  arr.HeadAddArr(1);
  arr.HeadAddArr(3);
  arr.printArr();
  arr.DelHeadArr();
  arr.printArr();
  arr.MidAddArr(2,4);
  arr.printArr();
  arr.DelMidArr(1);
  arr.printArr();
  arr.TailAddArr(5);
  arr.printArr();
  arr.DelTailArr();
  arr.printArr();
  arr.getArr(2);
  arr.modArr(2,6);
  arr.judArr(6);
  return 0;
}

主函数中先定义一个类的对象,然后使用类模板定义数组中元素的类型(这里假
设为int型),然后用对象调用成员函数实现相应的功能。

猜你喜欢

转载自blog.csdn.net/weixin_43645389/article/details/83904268
今日推荐