⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynamic_array.h

📁 vs.lib is a math library in C++ with a set of linear algebra and integrable / differentiable objects
💻 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 + -