题目描述
编写有界数组模板BoundArray(即检查对数组元素下标引用并在下标越界时终止程序的执行),能够存储各种类型的数据。要求实现对数组进行排序的方法sort,及对数组进行查找的方法search。(不能直接调用C++自带的排序或查找函数)
输入
第一行先输入t,表示有t个测试用例
从第二行开始输入每个测试用例的数据。
首先输入数据类型,I表示int,D表示double,C表示char,接着输入数组的元素个数
然后输入每个元素
最后输入要查找的元素
输出
首先输出从小到大排序的元素
然后输出查找元素的结果,找到则输出下标,没找到则输出-1
样例输入
2
I 2
1 2
2
D 3
3.5 6.2 2.9
2.1
样例输出
1 2
1
2.9 3.5 6.2
-1
#include<iostream>
#include<stdlib.h>
#include <cstring>
using namespace std;
template<class T>
class BoundArray{
public:
T *ip;
int size;
BoundArray(int a)
{
size=a;
}
void input(int b)
{
T *p=new T[b];
for(int i=0;i<b;i++)
{
cin>>p[i];
}
ip=p;
}
void sort()
{
for(int i=0;i<(size-1);i++)
{
for(int j=(i+1);j<size;j++)
{
if(ip[i]>ip[j])
{
T temp=ip[i];
ip[i]=ip[j];
ip[j]=temp;
}
else
continue;
}
}
}
int search(T a)
{
for(int i=0;i<size;i++)
{
if(ip[i]==a)
{
return i;
}
if(i==(size-1))
{
return -1;
}
}
}
void output()
{
for(int i=0;i<size;i++)
{
cout<<ip[i]<<" ";
}
cout<<endl;
}
};
int main()
{
int t,n;
cin>>t;
char c;
int tem;
while(t--)
{
cin>>c>>n;
switch(c)
{
case 'I':
{
BoundArray<int> a1(n);
a1.input(n);
int k;
cin>>k;
a1.sort();
a1.output() ;
tem=a1.search(k);
cout<<tem<<endl;
break;
}
case 'D':
{
BoundArray<double> a2(n);
a2.input(n);
double k2;
cin>>k2;
a2.sort();
a2.output() ;
tem=a2.search(k2);
cout<<tem<<endl;
break;
}
case 'C':
{
BoundArray<char> a3(n);
a3.input(n);
char k3;
cin>>k3;
a3.sort();
a3.output() ;
tem=a3.search(k3);
cout<<tem<<endl;
break;
}
}
}
}