定義一元素爲整數的動態數組類,並在主函數中調用各個功能:
數據成員:指向元素首地址的指針(用於存儲動態申請的數組空間)、當前數組的容量、當前元素的個數;
成員函數:
帶參/無參構造函數(無參的動態申請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();
}