#ifndef EVIL_HPP #define EVIL_HPP #include #include using namespace std; class Evil { private: int st, ed, val; int *data = nullptr; public: // 构造函数 Evil(int __st = 0, int __ed = 0, int __val = 0) { st = __st; ed = __ed; val = __val; data = new int[ed - st + 1](); } Evil(const Evil &src) { st = src.st; ed = src.ed; val = src.val; data = new int[ed - st + 1](); std::memmove(data, src.data, sizeof(int) * (ed - st + 1)); } // 下标运算符重载 int &operator[](int idx) { if (idx < st || idx > ed) return *data; return *(data + idx - st); } // 赋值运算符重载 Evil &operator=(const Evil &src) { delete[] data; st = src.st; ed = src.ed; val = src.val; data = new int[ed - st + 1](); std::memmove(data, src.data, sizeof(int) * (ed - st + 1)); return *this; } // 前缀++重载 Evil &operator++() { val++; return *this; } // 后缀++重载 Evil operator++(int) { Evil ret = *this; val++; return ret; } // 输出重载 friend std::ostream &operator<<(std::ostream &stream, const Evil &dat); // 析构函数 ~Evil() { delete[] data; } void Print() { cout << val << " "; for (int i = 0; i < ed - st + 1; ++i) cout << data[i] << " "; cout << endl; } }; std::ostream &operator<<(std::ostream &stream, const Evil &dat) { stream << dat.val; for (int i = 0; i <= dat.ed - dat.st; i++) stream << ' ' << *(dat.data + i); stream << std::endl; return stream; } #endif // EVIL_HPP