#include "WMArray.h"
template < class T >
CWMArray< T >::CWMArray(void)
{
m_pArray = NULL;
m_nCapacity = 0;
m_nFront = 0;
m_nCurSize = 0;
m_nRear = 0;
}
template < class T >
CWMArray< T >::~CWMArray(void)
{
delete [] m_pArray;
}
template < class T >
bool CWMArray< T >::InitArray( int nCapacity )
{
if ( nCapacity > 0 )
{
m_pArray = new T[ nCapacity ];
if ( NULL == m_pArray )
{
return false;
}
m_nCapacity = nCapacity;
m_nFront = 0;
m_nCurSize = 0;
m_nRear = nCapacity - 1;
return true;
}
return false;
}
template < typename T >
bool CWMArray< T >::IsEmpty()
{
if ( m_nCurSize == 0 )
{
return true;
}
return false;
}
template < typename T >
bool CWMArray< T >::IsFull()
{
if ( m_nCurSize == m_nCapacity )
{
return true;
}
return false;
}
template < typename T >
int CWMArray< T >::Add( int nIndex )
{
if ( nIndex >= m_nCapacity )
{
nIndex = 0;
}
return nIndex;
}
template < typename T >
int CWMArray< T >::Minus( int nIndex )
{
if ( nIndex < 0 )
{
nIndex = m_nCapacity - 1;
}
return nIndex;
}
template < typename T >
void CWMArray< T >::push_front( const T& val )
{
assert( !( IsFull() ) );
*( m_pArray + m_nFront ) = val;
m_nFront++;
m_nFront = Add( m_nFront );
m_nCurSize++;
}
template < typename T >
T CWMArray< T >::pop_front()
{
assert( !IsEmpty() );
m_nFront = Minus( --m_nFront );
m_nCurSize--;
return *( m_pArray + m_nFront );
}
template < typename T >
void CWMArray< T >::push_back( const T& val )
{
assert( !( IsFull() ) );
*( m_pArray + m_nRear ) = val;
m_nRear--;
m_nRear = Minus( m_nRear );
m_nCurSize++;
}
template < typename T >
T CWMArray< T >::pop_back()
{
assert( !IsEmpty() );
m_nRear = Add( ++m_nRear );
m_nCurSize--;
return *( m_pArray + m_nRear );
}
template < typename T >
T& CWMArray< T >::operator []( int nIndex )
{
assert( nIndex < m_nCurSize );//若访问越界,则报异常,终止程序
int tempIndex = m_nFront - nIndex - 1;
if ( tempIndex >= 0 )
{
return *( m_pArray + tempIndex );
}
else
{
tempIndex = m_nCapacity + tempIndex;
return *( m_pArray + tempIndex );
}
}
template < typename T >
int CWMArray< T >::size()
{
return m_nCurSize;
}
template < typename T >
int CWMArray< T >::capacity()
{
return m_nCapacity;
}
template < typename T >
bool CWMArray< T >::erase( int nIndex )
{
assert( nIndex < m_nCurSize );//若访问越界,则报异常,终止程序
for ( int i = 0; i < ( m_nCurSize - nIndex - 1 ); ++i )
{
( *this )[ nIndex + i ] = ( *this )[ nIndex + i + 1 ];
}
m_nCurSize--;
m_nRear = Add( ++m_nRear );
return true;
}
template < typename T >
void CWMArray< T >::clear()
{
m_nFront = 0;
m_nCurSize = 0;
m_nRear = 0;
}
用数组实现的双端队列(类模板)
需积分: 50 168 浏览量
2013-03-26
16:13:36
上传
评论
收藏 2KB RAR 举报
shenpeng67
- 粉丝: 2
- 资源: 2
最新资源
- 基于51单片机的自动浇花设计论文
- 客服机器人需要的数据集,包括order、ware、user,测试集和开发集
- 用0到9生成十位数的所有排列组合(java代码).docx
- 模仿魔慢相机的人脸监测选择ios组件
- STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏已测
- Chromeextent_paly.zip
- 【2023年全国职业技能大赛“信息安全与评估”赛项】任务4-Linux内存取证WP+靶场环境
- 基于51单片机数字电压表的设计(PCB+原理图+仿真+论文+代码)
- open62541在window10 VS2019编译完成的源码
- 新闻文章自动新闻采集系统-webapps.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈