Files
SH-Quizzes/ACMOJ-1444.hpp
2023-12-23 22:23:48 +08:00

72 lines
1.5 KiB
C++

#ifndef EVIL_HPP
#define EVIL_HPP
#include <cstring>
#include <iostream>
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