template <typename T, unsigned int N>
class Array
{
public:
// STL-like types
typedef T value_type;
typedef T & reference;
typedef const T & const_reference;
typedef T * pointer;
typedef const T * const_pointer;
typedef T * iterator;
typedef const T * const_iterator;
typedef ptrdiff_t difference_type;
typedef size_t size_type;
enum { array_dims = N }; // Number of dimensions
private:
T * m_pArrayElements; // Elements allocated
size_type m_nArrayElements; // Total number of elements
//..........
public:
// STL-like iterators
iterator begin() { return m_pArrayElements; }
const_iterator begin() const { return m_pArrayElements; }
iterator end()
{ return m_pArrayElements+m_nArrayElements; }
const_iterator end() const
{ return m_pArrayElements+m_nArrayElements; }
// Some more STL-like members
size_type size() const { return m_nArrayElements: }
bool empty() const { return m_nArrayElements==0; }
void swap(Array<T,N> & S);
// Return the size of each dimension
size_type size(unsigned int Dim) const
{ return m_NDimensions[Dim-1]; }
// Return the number of dimensions
unsigned int dimensions() const { return N; }
// Delete all array elements
void clear();
//...
};