動態數組的C++簡易實現

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章