Init
This commit is contained in:
72
ACMOJ-1444.hpp
Normal file
72
ACMOJ-1444.hpp
Normal file
@ -0,0 +1,72 @@
|
||||
#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
|
Reference in New Issue
Block a user