Arrays
******

Constructors and Assignment
===========================

 -- Constructor: Array<T>::Array (void)
     Create an array with no elements.

 -- Constructor: Array<T>::Array (int N [, const T &VAL])
     Create an array with N elements.  If the optional argument VAL is supplied, the elements are initialized to VAL; otherwise, they are left uninitialized.  If N is less than zero, the current error handler is invoked (see Error Handling).

 -- Constructor: Array<T>::Array (const Array<T> &A)
     Create a copy of the ARRAY<T> object A.  Memory for the ARRAY<T> class is managed using a reference counting scheme, so the cost of this operation is independent of the size of the array.

 -- Operator: Array<T>& Array<T>::operator = (const Array<T> &A)
     Assignment operator.  Memory for the ARRAY<T> class is managed using a reference counting scheme, so the cost of this operation is independent of the size of the array.

 -- Method: int Array<T>::capacity (void) const
 -- Method: int Array<T>::length (void) const
     Return the length of the array.

 -- Method: T& Array<T>::elem (int N)
 -- Method: T& Array<T>::checkelem (int N)
 -- Method: T& Array<T>::operator () (int N)
     If N is within the bounds of the array, return a reference to the element indexed by N; otherwise, the current error handler is invoked (see Error Handling).

 -- Method: T Array<T>::elem (int N) const
 -- Method: T Array<T>::checkelem (int N) const
 -- Method: T Array<T>::operator () (int N) const
     If N is within the bounds of the array, return the value indexed by N; otherwise, call the current error handler. See Error Handling.

 -- Method: T& Array<T>::xelem (int N)
 -- Method: T Array<T>::xelem (int N) const
     Return a reference to, or the value of, the element indexed by N. These methods never perform bounds checking.

 -- Method: void Array<T>::resize (int N [, const T &VAL])
     Change the size of the array to be N elements.  All elements are unchanged, except that if N is greater than the current size and the optional argument VAL is provided, the additional elements are initialized to VAL; otherwise, any additional elements are left uninitialized.  In the current implementation, if N is less than the current size, the length is updated but no memory is released.

 -- Method: const T* Array<T>::data (void) const

 -- Array2: (void)
 -- Array2: (int N, int M)
 -- Array2: (int N, int M, const T &VAL)
 -- Array2: (const Array2<T> &A)
 -- Array2: (const DiagArray<T> &A)

 -- Array2<T>&: operator = (const Array2<T> &A)

 -- int: dim1 (void) const
 -- int: rows (void) const

 -- int: dim2 (void) const
 -- int: cols (void) const
 -- int: columns (void) const

 -- T&: elem (int I, int J)
 -- T&: checkelem (int I, int J)
 -- T&: operator () (int I, int J)

 -- void: resize (int N, int M)
 -- void: resize (int N, int M, const T &VAL)

 -- Array3: (void)
 -- Array3: (int N, int M, int K)
 -- Array3: (int N, int M, int K, const T &VAL)
 -- Array3: (const Array3<T> &A)

 -- Array3<T>&: operator = (const Array3<T> &A)

 -- int: dim1 (void) const
 -- int: dim2 (void) const
 -- int: dim3 (void) const

 -- T&: elem (int I, int J, int K)
 -- T&: checkelem (int I, int J, int K)
 -- T&: operator () (int I, int J, int K)

 -- void: resize (int N, int M, int K)
 -- void: resize (int N, int M, int K, const T &VAL)

 -- DiagArray: (void)
 -- DiagArray: (int N)
 -- DiagArray: (int N, const T &VAL)
 -- DiagArray: (int R, int C)
 -- DiagArray: (int R, int C, const T &VAL)
 -- DiagArray: (const Array<T> &A)
 -- DiagArray: (const DiagArray<T> &A)

 -- DiagArray<T>&: operator = (const DiagArray<T> &A)

 -- int: dim1 (void) const
 -- int: rows (void) const

 -- int: dim2 (void) const
 -- int: cols (void) const
 -- int: columns (void) const

 -- T&: elem (int R, int C)
 -- T&: checkelem (int R, int C)
 -- T&: operator () (int R, int C)

 -- void: resize (int N, int M)
 -- void: resize (int N, int M, const T &VAL)