【更新中】程序设计实习笔记
20220406 - 2022 程序设计实习之STL1作业
都是OI中学过的技巧……
C:很难蒙混过关的CArray3d三维数组模板类
感谢036 很难蒙混过关的CArray3d三维数组模板类 - icefield817 - 博客园。
public:
T *a;
int n, m, o;
struct CArray2D {
T *a;
int m, o;
CArray2D(int _m, int _o, T *_a): m(_m), o(_o), a(_a) {}
operator T*() {
return a;
}
T* operator [](int j) {
return a + j * o;
}
};
CArray3D(int _n, int _m, int _o): n(_n), m(_m), o(_o) {
a = new T [n * m * o];
memset(a, 0, n*m*o*sizeof(T));
}
operator T*() {
return a;
}
CArray2D operator [](int i) {
return CArray2D(m, o, a + i * m * o);
}
D:函数对象的过滤器
template<class T>
struct FilterClass{
T m, n;
FilterClass(T _m, T _n): m(_m), n(_n) {}
bool operator ()(const T &t) {
return m < t && t < n;
}
};
E:白给的list排序
greater<double>()
F:我自己的 ostream_iterator
参考课件,提示:
- 实现 ostream_iterator 类应该重载以下运算符中的 \(3\) 个:
=
,*
,++
,!=
- 输出的工作放在
=
运算符中做最合适。
public:
ostream *out;
string sep;
myostream_iteraotr(ostream &_out, string _sep): out(&_out), sep(_sep) {}
void operator ++() { cout << sep; }
myostream_iteraotr<T> operator *() { return *this; }
void operator =(const T& t) { (*out) << t; }