- 博主第一篇文章写的比较复杂,后期进行了相关的优化,将一些类似的程序进行了合并,并在第一篇的基础上增加了对多个重复数据下标输出问题的解决,具体程序大家可以先看博主第一篇文章,并与这篇文章加以对比,慢慢体会程序的相关变化。
#include<iostream>
using namespace std;
template<class Type>
class GenericArray
{
private:
enum{ ArrSize = 10 };
Type *items;
int size, count;
public:
GenericArray(int length = ArrSize);
~GenericArray(){ delete[]items; }//删除动态数组
void printArr()const;
bool isempty(){ return count == 0; }
bool isfull(){ return count == size; }
//void HeadAddArr(Type elem);
void addArr(int index, Type elem);
//void TailAddArr(Type elem);
//void DelHeadArr();
void delArr(int);
//void DelTailArr();
Type getArr(int index);
void modArr(int, Type);
int judArr(Type, int[]);
};
template<class Type>
GenericArray<Type>::GenericArray(int length) :size(length), count(0)
{
items = new Type[size];
}
template<class Type>
void GenericArray<Type>::printArr()const
{
for (int i = 0; i < count; i++)
cout << items[i] << '\t';
cout << endl;
}
template<class Type>
void GenericArray<Type>::addArr(int index, Type elem)//函数参数为索引和插入的元素
{
if (!isfull())
{
//count++;
for (int i = count; i>index; i--)
{
items[i] = items[i - 1];
}
count++;
items[index] = elem;
}
}
template<class Type>
void GenericArray<Type>::delArr(int index)
{
if (!isempty() && index<count)
{
for (int i = index; i<count - 1; i++)
items[i] = items[i + 1];
count--;
}
}
template<class Type>
Type GenericArray<Type>::getArr(int index)
{
if (!isempty() && index < count)
return items[index];
return -1;//错误提示
}
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>
int GenericArray<Type>::judArr(Type elem,int idex[])//idex[]为传出参数,用于接收多个输出的参数
{
int m = -1;
//int index=0;
if (!isempty())
{
for (int i = 0; i < count; i++)
{
if (items[i] == elem)
//index = i;
{
//return i;//减小内存
m++;
idex[m] = i;
}
}
if (m >= 0)
return 0;
//cout << index << endl;
}
return -1;
}
int main()
{
int a[100] = { 0 };
GenericArray<int>arr(8);//定义一个GenenricArray类arr,arr类成员index指向一个大小为5的整型数组
//GenericArray<double>arr1;
arr.addArr(0, 2);
arr.printArr();//2
arr.addArr(0, 3);
arr.printArr();//3 2
arr.addArr(2, 2);//3 2 2
arr.addArr(3, 6);
arr.printArr();//3 2 2 6
//arr.delArr(0);
//arr.printArr();//2 2 6
//arr.delArr(1);
//arr.printArr();//2 6
//arr.delArr(1);
//arr.printArr();//2
//arr.getArr(0);
//arr.printArr();//2
//arr.modArr(0, 6);
//arr.printArr();//6
arr.judArr(2,a);//0
int i=0;
while (a[i])//输出多个数据下标
{
cout << a[i++] << '\t';
}
cout << endl;
return 0;
}