动态数组的创建
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型),然后用对象调用成员函数实现相应的功能。