实际应用中,有很多用到定长数组的时候,下面结合模板类给出一个定长数组的实现方式。
#ifndef __FIXED_ARRAY_H
#define __FIXED_ARRAY_H
#include <stdio.h>
template <class T, unsigned int SIZE>
class CFixedArray
{
public:
CFixedArray();
CFixedArray(const CFixedArray &right);
CFixedArray(const T *pData, unsigned int iSize);
~CFixedArray();
CFixedArray & operator = (const CFixedArray &right);
bool operator == (const CFixedArray &right) const;
bool operator != (const CFixedArray &right) const;
bool operator < (const CFixedArray &right) const;
public:
T m_data[SIZE];
};
template <class T, unsigned int SIZE>
CFixedArray<T, SIZE>::CFixedArray()
{
memset(m_data, 0, sizeof(m_data));
}
template <class T, unsigned int SIZE>
CFixedArray<T, SIZE>::CFixedArray(const CFixedArray<T, SIZE> &right)
{
memcpy(m_data, right.m_data, sizeof(m_data));
}
template <class T, unsigned int SIZE>
CFixedArray<T, SIZE>::CFixedArray(const T *pData, unsigned int iSize)
{
if (pData != NULL)
{
if (iSize < SIZE)
{
memcpy(m_data, pData, iSize * sizeof(T));
memset(m_data + iSize, 0, (SIZE - iSize) * sizeof(T));
}
else
{
memcpy(m_data, pData, sizeof(m_data));
}
}
else
{
memset(m_data, 0, sizeof(m_data));
}
}
template <class T, unsigned int SIZE>
CFixedArray<T, SIZE>::~CFixedArray()
{
}
template <class T, unsigned int SIZE>
CFixedArray<T, SIZE> & CFixedArray<T, SIZE>::operator = (const CFixedArray<T, SIZE> &right)
{
memcpy(&m_data, &right.m_data, sizeof(m_data));
return *this;
}
template <class T, unsigned int SIZE>
bool CFixedArray<T, SIZE>::operator == (const CFixedArray<T, SIZE> &right) const
{
return (memcmp(m_data, right.m_data, sizeof(m_data)) == 0);
}
template <class T, unsigned int SIZE>
bool CFixedArray<T, SIZE>::operator != (const CFixedArray<T, SIZE> &right) const
{
return (memcmp(m_data, right.m_data, sizeof(m_data)) != 0);
}
template <class T, unsigned int SIZE>
bool CFixedArray<T, SIZE>::operator < (const CFixedArray<T, SIZE> &right) const
{
for (unsigned int i = 0; i < SIZE; ++i)
{
if (m_data[i] < right.m_data[i])
{
return true;
}
}
return false;
}
同时实现了数组比较等功能,容易拓展