class int_table {
 public:
  // Construct a new int_table
  int_table();

  // append an element to the table
  void add_elem(int a);

  // make the table bigger
  void resize();

  // return the currently used size of the table
  int cur_size() { return size; };

  // return an unsafe pointer to the current internal table...  This should 
  // not be used, as it can destroy the data structure unless one is very 
  // careful.
  int * table_array() { return table; };

  // print the table out to the standard output.
  void print_out();

  // return the specified element of the array, or something bogus (0) if the
  // specified index is outside the array.
  int& operator[](int);




 private:
  int * table;   // The actual array of elements that is the table.

  int size;      // How much of the table is being used?
  int max_size;  // How big can the table get before needing a resize?

  // This element really is only here to be returned by bad calls to the [] 
  // operator.
  int phantom;
};

