您的位置:首页 > 其它

固定长度数组

2013-09-09 18:30 387 查看
实际应用中,有很多用到定长数组的时候,下面结合模板类给出一个定长数组的实现方式。

#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;
}


同时实现了数组比较等功能,容易拓展
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: