C++类的列表(动态数组)使用实例

一、class List 主体

class List                                      //定义类List
{  
public:                                         //public修饰符
    int* Data;                                  //定义Data为分配数组内存的指针
    int Count;                                  //定义已有几位数
    int Size;                                   //定义列表长度
public:                                         //public修饰符
    List()                                      //默认构造初始化
    {
        Size = 8;                               //初始化长度为8
        Count = 0;                              //位数无
        Data = new int[Size];                   //在内存上分配size(8)个int连续内存
    }

    void Resize()                               //当数组大小超出原本分配的部分,将内存清除重新分配内存空间
    {
        Size *= 2;                              //将数组长度翻倍
        int* newData = new int[Size];           //分配大小为size的新内存空间
        for (int i = 0; i < Count; i++)         //i循环到Count计数
        {
            newData[i] = Data[i];               //将新数组空间填充原本的数字
        }
        delete[] Data;                          //删除Data占用的内存
        Data = newData;                         //将Data指向更改完成的newData位置
    }

    void Add(int value)                         //向数组中增加数
    {
        if (Count == Size)                      //检查数组大小是否超出(是)
        {
            Resize();                           //扩充数组大小
        }
        Data[Count] = value;                    //将新位数赋value
        Count++;                                //位数计数增加
    }

    void RemoveAt(int index)                    //向数组中减去第index位数
    {
        for (int i = index; i < Count - 1; i++) //i循环从index到已有数
        {
            Data[i] = Data[i + 1];              //从index开始将后一位数等于自身
        }
        Data[Count - 1] = 0;                    //将原最后一位清空
        Count--;                                //位数计数减少
    }

    int Get(int index)                          //获取第index位数
    {
        return Data[index];                     //返回第index位数
    }

    void Clear()                                //清除数组内容
    {
        for (int i = 0; i < Count; i++)         //从0开始i循环到已有数字位数
        {
            Data[i] = 0;                        //将数字归零
        }
        Count = 0;                              //将位数计数归零
    }

    void InsertAt(int value, int index)         //在index位插入数字value
                                                    //原// 1 2 3 4
                                                    //执行// InsertAt(99, 1)
                                                    //新// 1 99 2 3 4
    {
        if (Count == Size)                      //同Add中的检查大小
        {
            Resize();
        }
        for (int i = Count; i > index; i--)     //从已有数位计数开始递减到index位
        {                                        //已有位数计数带入数组为位数的下一位
            Data[i] = Data[i - 1];              //从空位将前一数后移一位
        }
        Data[index] = value;                    //将index位赋数字value
        Count++;                                //增加一位计数位数

    }

    ~List()                                     //析构函数
    {
        Size = 0;
        Count = 0;
        delete[] Data;
        Data = nullptr;
    }
};

二、使用部分

int main()
{
    List list;                                  //定义列表list
    for (int i = 0; i < 16; i++)                //i循环16位数(0~15)
    {
        list.Add(i);                            //执行添加
    }
    for (int i = 0; i < list.Count; i++)        //循环到计数位数
    {
        cout << list.Get(i) << endl;            //输出取值
    }
}

三、输出结果

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

C++类的列表(动态数组)使用实例
https://chooseqiu.com/posts/6697fb37/
作者
Chooseqiu
许可协议