#include <iostream>
#include <iomanip>

using namespace std;

class ARR {
private:
    int n; // 数组实际元素个数
    int a[100]; // 存放原始数组及结果数组

public:
    // 构造函数，用size初始化n，用x初始化a数组
    ARR(int x[], int size) : n(size) {
        for (int i = 0; i < size; ++i) {
            a[i] = x[i];
        }
    }

    // 完成数组a中相同元素的删除工作
    void delsame() {
        if (n == 0) return;

        int j = 0; // 新数组的索引
        for (int i = 1; i < n; ++i) {
            if (a[i] != a[j]) {
                a[++j] = a[i];
            }
        }
        n = j + 1; // 更新数组的实际元素个数
    }

    // 将结果数组以每行10个数的形式输出到屏幕上
    void show() const {
        for (int i = 0; i < n; ++i) {
            cout << setw(5) << a[i];
            if ((i + 1) % 10 == 0) {
                cout << endl;
            }
        }
        if (n % 10 != 0) {
            cout << endl;
        }
    }
};

int main() {
    int b[] = {1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 8, 9, 10, 10}; // 定义数组
    int n = sizeof(b) / sizeof(int); // 计算b数组的元素长度
    ARR v(b, n); // 定义类的对象并用数组b和数据n初始化对象的成员

    cout << "删除前：";
    v.show(); // 输出对象的数组成员中的数据(还未做删除操作, 输出的是初始化后的数据)
    cout << endl;

    v.delsame(); // 对对象进行操作, 即将对象的数组成员中的相同的元素删除

    cout << "删除后：";
    v.show(); // 删除操作后输出对象的数组成员中的数据
    cout << endl;

    return 0;
}
