题目描述
编写有界数组模板BoundArray(即检查对数组元素下标引用并在下标越界时终止程序的执行),能够存储各种类型的数据。要求实现对数组进行排序的方法sort,及对数组进行查找的方法search。(不能直接调用C 自带的排序或查找函数)
输入
第一行先输入t,表示有t个测试用例
从第二行开始输入每个测试用例的数据。
首先输入数据类型,I表示int,D表示double,C表示char,接着输入数组的元素个数
然后输入每个元素
最后输入要查找的元素
输出
首先输出从小到大排序的元素
然后输出查找元素的结果,找到则输出下标,没找到则输出-1
输入样例1
2 I 2 1 2 2 D 3 3.5 6.2 2.9 2.1
输出样例1
1 2 1 2.9 3.5 6.2 -1
思路分析
写一个模板类,这题考查基本知识,就是题目说检查对数组元素下标引用并在下标越界时终止程序的执行,问题不大,找到则输出下标,没找到则输出-1就行了。
AC代码
代码语言:javascript复制#include <iostream>
using namespace std;
template<class T>
class BoundArray
{
int n;
T* array = NULL;
public:
~BoundArray()
{
if (array)
{
delete[] array;
array = NULL;
}
}
void datain()
{
cin >> n;
array = new T [n];
int i;
for (i = 0; i < n; i )
cin >> array[i];
}
void sort()
{
int i, j;
for (i = 0; i < n - 1; i )
for (j = 0; j < n - 1; j )
if (array[j] > array[j 1])
swap(array[j], array[j 1]);
}
void search()
{
T target;
cin >> target;
for (int i = 0; i < n; i )
if (array[i] == target)
{
cout << i << endl;
return;
}
cout << "-1" << endl;
return;
}
void print()
{
int i;
for (i = 0; i < n; i )
{
cout << array[i] << ' ';
}
cout << endl;
}
};
int main()
{
int t;
char instru;
cin >> t;
while (t--)
{
cin >> instru ;
if (instru == 'I')
{
BoundArray<int> a;
a.datain();
a.sort();
a.print();
a.search();
}
else if (instru == 'D')
{
BoundArray<double> a;
a.datain();
a.sort();
a.print();
a.search();
}
else if(instru=='C')
{
BoundArray<char> a;
a.datain();
a.sort();
a.print();
a.search();
}
}
return 0;
}