📄 dynamic_array.h
字号:
#ifndef __DYNAMIC_ARRAY_H
#define __DYNAMIC_ARRAY_H
#include <stdlib.h>
template<class T> class Dynamic_Array_Iterator;
template<class T>
class Dynamic_Array {
T **v;
int size, next, owner;
enum { increment = 20 };
public:
Dynamic_Array(int ow = 1) : v(0), next(0), size(0), owner(ow) {}
Dynamic_Array(const Dynamic_Array& da) { // copy by reference
v = da.v; size = da.size; next = da.next; owner = 0; }
~Dynamic_Array();
void add(T* P); // copy by value
const int length() const { return next; }
T& operator[](int i) { return *v[i]; }
friend class Dynamic_Array_Iterator<T>;
};
template<class T>
class Dynamic_Array_Iterator {
Dynamic_Array<T> &dynamic_array;
int the_index;
public:
Dynamic_Array_Iterator(Dynamic_Array<T>& B) : dynamic_array(B), the_index(0) {}
~Dynamic_Array_Iterator() { /*do nothing*/ }
T* operator->() { return dynamic_array.v[the_index]; }
T* top() { return dynamic_array.v[the_index = 0]; }
T* end() { return dynamic_array.v[the_index = dynamic_array.length()-1]; }
T* current() { return dynamic_array.v[the_index]; }
int more() { if(the_index < dynamic_array.next-1) return TRUE; else return FALSE; }
int index() { return the_index; }
T* operator++(int) { return dynamic_array.v[the_index++]; }
T* operator++() { the_index++; return dynamic_array.v[the_index]; }
T* operator--(int) { T* tmp = dynamic_array.v[the_index]; the_index--; return tmp; }
T* operator--() { return dynamic_array.v[--the_index]; }
int length() { return dynamic_array.length(); }
};
template<class T>
Dynamic_Array<T>::~Dynamic_Array() {
if(owner == 1) {
for(int i = 0; i < next; i++) if(v[i]) delete v[i];
if(v) { delete [] v; v = 0; }
size = next = 0;
}
}
template<class T>
void Dynamic_Array<T>::add(T* P) {
if(next >= size) {
size += increment;
T** temp_v = new T*[size];
if(next) {
for(int i = 0; i < next; i++) temp_v[i] = v[i];
if(v) { delete [] v; v = 0; }
}
v = temp_v;
}
v[next++] = P;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -