#ifndef _ARRAY_H
#define _ARRAY_H
// growable array
// use like this:
//
// #include "Array.h"
// #include "Array.cc"
//
// ...
//
// Array<int> h(-1); // -1 is the default value for uninitialized elements
// Array<int> g; // uninitialized elements of g have no default value
// Array<int> f(h); // copy constructor
//
// h[2] = 3;
//
// for (int i = 0; i < h.size(); ++i) ...
//
// g = h; // make g a deep copy of h (including the default values)
//
// h.clear(); // reset h to initial state
//
//
#include <iostream.h>
template <class VALUE>
class Array {
VALUE *table;
int max_referenced;
int table_size;
int use_default;
VALUE default_init;
void copy(const Array& a); // copy a into this array
void grow(); // replace the table with one twice as large
// copy the old contents into the new table
public:
Array(); // constructor without default, or...
Array(const VALUE& def); // with default for newly allocated elements
VALUE & operator[](int i); // return a reference to the i'th elt
// grow the table if necessary
~Array(); // destructor
int size() const; // 1+largest index referenced so far
public:
VALUE operator[](int i) const; // use only when i < size
void clear();
// copy constructor and assignment op
Array operator=(const Array& a) { copy(a); return *this; }
Array(const Array& a) { table = NULL; copy(a); }
};
#endif