// 自定义ArrayList类，实现线性列表（类似数组）结构的数据元素操作。操作方法：
//     1. add(int) 添加int整型的数据元素
//     2. remove(int) 删除数据元素
//     3. int get(int index) 获取指定位置的元素
//     4. void print() 打印列表中所有元素
//     5. int size() 返回列表的当前大小
//     6. void sort(bool reversed = false) 元素排序，reversed为true时，表示从大小到小，反之，表示从小到到。
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std;

class ArrayList
{
private:
    vector<int> elements; // 动态数组元素

public:
    void add(int value) // 添加 int 整型的数据元素
    {
        elements.push_back(value);
    }
    void remove(int index) // 删除数据元素
    {
        int size = elements.size();
        if (index >= 0 && index < size)
            elements.erase(elements.begin() + index);
    }
    int get(int index) // 获取指定位置的元素
    {
        int size = elements.size();
        if (index >= 0 && index < size)
            return elements[index];
        return -1; // 返回无效索引，表示未找到元素
    }
    void print() // 打印列表中的所有元素
    {
        for (int i = 0; i < elements.size(); i++)
            cout << elements[i] << " ";
    }
    int size() // 返回列表的当前大小
    {
        return elements.size();
    }
    void sort(bool reversed = false) // 默认从小到大排序，当reversed 为 true 时，从大到小排序
    {
        if (reversed == true)
            std::sort(elements.rbegin(), elements.rend());
        else
            std::sort(elements.begin(), elements.end());
    }
};

int main()
{
    ArrayList list;

    list.add(5);
    list.add(2);
    list.add(8);
    list.add(9);
    list.add(13);

    cout << "原始列表: ";
    list.print();
    cout << endl;

    cout << "列表大小为: " << list.size() << endl;

    cout << "删除第二位的元素后显示为: ";
    list.remove(2);
    list.print();
    cout << endl;

    cout << "此时第二位的元素为: " << list.get(2) << endl;

    cout << "从大到小排序后列表为: ";
    list.sort(true);
    list.print();
    cout << endl;

    cout << "从小到大排序后列表为: ";
    list.sort();
    list.print();
    cout << endl;

    return 0;
}
