#pragma once

template

class CDynArray

    {

    private:

     // pointer to internal container

     T *m_pData;

     // number of elements;

     DWORD m_dwSize;

    

    public:

     CDynArray():m_pData(NULL){};

     CDynArray(DWORD dwNumberofElements)

         {

         m_dwSize = dwNumberofElements;

         m_pData = new T[m_dwSize];

         };

         CDynArray(const CDynArray& DynArray)

             {

             m_dwSize = DynArray.m_dwSize;

             m_pData = new T[m_dwSize];

             for(int i=0;i < m_dwSize;i++)

             *(m_pData + i) = *(DynArray.m_pData+i);

        };

         ~CDynArray()

             {

             delete [] m_pData;

             };

             T& operator [](DWORD nIndex)

                 {

                 if((NULL == m_pData) || (nIndex > m_dwSize))

                     {

                     throw out_of_range("CDynArray::operator[] passed an out of range index");

                     }

                     return *(m_pData + nIndex);

                     };

                     // provides lossless resize for sizes greater than current size

                     bool Resize(DWORD dwNewsize) 

                         {

                         T *pTmp = new T[dwNewsize];

                         if(NULL == pTmp)

                         return false;

                         DWORD dwsize = (m_dwSize > dwNewsize) ? dwNewsize : m_dwSize;

                        for(int i=0;i < dwsize;i++)

                         *(pTmp + i) = *(m_pData+i);

                         delete [] m_pData;

                         m_pData = pTmp;

                         m_dwSize = dwNewsize;

                         return true;

                         };

                    };