定义一元素为整数的动态数组类,并在主函数中调用各个功能:
数据成员:指向元素首地址的指针(用于存储动态申请的数组空间)、当前数组的容量、当前元素的个数;
成员函数:
带参/无参构造函数(无参的动态申请10个元素空间并改变当前数组的容量、当前元素的个数值;带参的按参数处理);
在尾部增加一元素;
修改指定位置上的元素值;
查询指定数据的元素是否存在;
输出所有数组中的元素; 增加数组容量(动态申请新容量数组空间、将原来数组空间中的元素复制到新空间并修改当前数组的容量值,释放delete原来数组空间);
析构函数(释放动态申请的数组空间);
二分查询指定数据的元素并返回原始所处的位置(选作,首先在函数内定义一个结构体数组,临时存放当前元素值和位置。其次,使用sort函数对结构体数组排序,最后,利用二分(折半)查找方法找指定元素是否存在。存在,返回原始位置值。否则,返回-1。返回前释放结构体数组的空间)。
#include <iostream>
#include <algorithm>
using namespace std;
struct MyList
{
int no;
int data;
bool operator < (const MyList& list) const
{
if (data == list.data)
{
return no < list.no;
}
else
{
return data < list.data;
}
}
};
class MyArray
{
private:
int* pointer;
int n;
int x;
public:
MyArray()
{
pointer = new int[10];
x = 0;
n = 10;
}
MyArray(int num)
{
pointer = new int[num];
x = 0;
n = num;
}
int getNum()
{
return n;
}
int getNowNum()
{
return x;
}
void addLast(int data);
void modify(int i, int data);
int isExist(int data);
void print();
void addNum();
int find(int data);
~MyArray();
};
MyArray::~MyArray()
{
delete []pointer;
}
void MyArray::addLast(int data)
{
if (x < n)
{
pointer[x] = data;
x++;
}
else
{
addNum();
pointer[x] = data;
x++;
}
}
void MyArray::print()
{
for (int i = 0; i < x; i++)
{
cout << pointer[i] << " ";
}
}
void MyArray::addNum()
{
int* p = new int[2 * n];
for (int i = 0; i < x; i++)
{
p[i] = pointer[i];
}
delete[]pointer;
pointer = p;
n = 2 * n;
}
void MyArray::modify(int i, int data)
{
pointer[i] = data;
}
int MyArray::isExist(int data)
{
for (int i = 0; i < x; i++)
{
if (data == pointer[i])
{
return 1;
}
}
return 0;
}
int MyArray::find(int data)
{
MyList* list = new MyList[n];
for (int i = 0; i < x; i++)
{
list[i].data = pointer[i];
list[i].no = i;
}
sort(list, list + x);
int mid, low = 0, high = x;
while (low <= high)
{
mid = (low + high) / 2;
if (data < list[mid].data)
high = mid - 1;
else if (data > list[mid].data)
low = mid + 1;
else
{
int temp;
temp = list[mid].no;
delete[]list;
return temp;
}
}
return 0;
}
int main()
{
MyArray array(2);
array.addLast(3);
array.addLast(10);
cout << array.getNowNum() << endl;
cout<<array.getNum()<<endl;
array.addLast(20);
cout << array.getNowNum() << endl;
cout << array.getNum() << endl;
array.modify(2, 100);
cout<<array.find(100)<<endl;
if (array.isExist(100) == 1)
cout << "exist" << endl;
else
cout << "error" << endl;
array.print();
}