要求: 在对数组元素下标引用时进行检查, 并在下标越界时终止程序。
实现:对数组进行排序,并实现元素查找
#include <iostream>
#include <stdlib.h>
using namespace std;
template <class T>
class BoundArray
{
int n;
T *data;
public:
BoundArray(int n_val, T *p)
{
int i;
n = n_val;
data = new T [n];
for(i = 0; i < n; i++)
data[i] = p[i];
}
BoundArray &operator[](const int &r) // 最好是 const ,并且必须要引用
{
if(r < 0 || r >= n)
exit(1);
else return *this;
}
void sort()
{
int i, j;
T temp;
for(i = 0; i < n-1; i++)
{
for(j = 0; j < n-1; j++)
{
if(data[j] > data[j+1])
{
temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}
int search(T target)
{
int low = 0;
int high = n-1;
int mid = (low+high)/2;
while(low <= high)/
{
mid = (low+high)/2;
if(data[mid] == target)
return mid;
else if(data[mid] < target)
low = mid+1;
else high = mid-1;
}
return -1;
}
void display()
{
int i;
for(i = 0; i < n; i++)
cout << data[i] << " ";
cout << endl;
}
~BoundArray()
{
delete []data;
}
};
int main()
{
int T, n, i;
char ch;
cin >> T;
while(T--)
{
cin >> ch;
if(ch == 'I')
{
cin >> n;
int *data = new int [n];
for(i = 0; i < n; i++)
cin >> data[i];
int target;
cin >> target;
BoundArray<int> a(n, data);
a.sort();
a.display();
cout << a.search(target) << endl;
delete []data;
}
else if(ch == 'D')
{
cin >> n;
double *data = new double [n];
for(i = 0; i < n; i++)
cin >> data[i];
double target;
cin >> target;
BoundArray<double> a(n, data);
a.sort();
a.display();
cout << a.search(target) << endl;
delete []data;
}
else
{
cin >> n;
char *data = new char [n];
for(i = 0; i < n; i++)
cin >> data[i];
char target;
cin >> target;
BoundArray<char> a(n, data);
a.sort();
a.display();
cout << a.search(target) << endl;
delete []data;
}
}
return 0;
}
样例输入
2
I 2
1 2
2
D 33.5 6.2 2.9
2.1
样例输出
1 2
1
2.9 3.5 6.2
-1