#include <iostream>
using namespace std;
#define PELINEAR_LIST_SUCCESS 0//操作成功
#define PELINEAR_LIST_ERROR_OVERFLOW 1//操作失败:溢出
#define PELINEAR_LIST_ERROR_NOTENOUGH 2//操作失败:内存不够
#define PELINEAR_LIST_ERROR_INDEX 3//索引值不在范围内
template <class T>
class peLineList
{
public:
T *element;
int maxlen;//最大长度
int length;//实际长度
public:
peLineList( int len );
~peLineList();
void PrintfError( int error );//错误检查
void PrintfElement( void );//打印所有元素
int Add( T data );//向尾部添加元素
int SetElement( int index, T data );//设置第index个元素的值,index:0-length
int Insert( int index, T data );//在位置index处插入数据data,index:0-maxlen
int Delete( int index );//删除元素
};
template <class T>
peLineList<T>::peLineList( int len )
{
element = new T[len];
memset( element, 0, sizeof( T ) * len );
maxlen = len;
length = 0;
}
template <class T>
peLineList<T>::~peLineList()
{
delete[] element;
}
template <class T>
void peLineList<T>::PrintfError( int error )
{
switch( error )
{
case PELINEAR_LIST_SUCCESS:
cout << "操作成功" << endl;
break;
case PELINEAR_LIST_ERROR_OVERFLOW:
cout << "内存溢出:超出最大范围" << endl;
break;
default:
break;
}//switch( error )
}
template <class T>
void peLineList<T>::PrintfElement( void )
{
if( 0 == length )
{
cout << "没有元素" << endl;
}//0 == length
else
{
for( int i = 0; i < length; ++i )
{
cout << element[i] << "," << endl;
}//i
}
cout << endl;
}
template <class T>
int peLineList<T>::SetElement( int index, T data )
{
if( index >= 0 || index < length )
{
*( element + index ) = data;
return PELINEAR_LIST_SUCCESS;
}//index >= 0 || index < length
else
{
return PELINEAR_LIST_ERROR_OVERFLOW;
}
}
template <class T>
int peLineList<T>::Insert( int index, T data )
{
if( ( length + 1 ) > maxlen )
{
return PELINEAR_LIST_ERROR_NOTENOUGH;//操作失败:内存不够
}//( length + 1 ) > maxlen
else
{
//把从index处开始的元素后移
for( int i = length - 1; i >= index; --i )
{
element[i + 1] = element[i];
}//i
element[index] = data;
++length;//长度加一
return PELINEAR_LIST_SUCCESS;
}
}
template <class T>
int peLineList<T>::Add( T data )
{
if( 0 == length )//还没有元素,赋值给第一个元素
{
*element = data;
++length;
return PELINEAR_LIST_SUCCESS;
}//0 == length
else if( length >= maxlen )//超出最大范围
{
return PELINEAR_LIST_ERROR_OVERFLOW;
}//
else
{
*( element + length ) = data;//把指针移至相应位置并赋值
++length;//长度加一
return PELINEAR_LIST_SUCCESS;
}
}
template <class T>
int peLineList<T>::Delete( int index )
{
if( index < 0 || index >= length )
{
return PELINEAR_LIST_ERROR_INDEX;
}//index < 0 || index >= length
if( index == ( length - 1 ) )//最后一个元素,直接删除
{
--length;
}//index == ( length - 1 )
else//不是最后一个元素,要进行移位操作
{
for( int i = index; i < ( length - 1 ); ++i )
{
element[i] = element[i + 1];
}//i
--length;
}
return PELINEAR_LIST_SUCCESS;
}
void main()
{
peLineList<int> m_List( 20 );
cout << "Add操作" << endl;
m_List.Add( 2 );
m_List.Add( 34 );
m_List.Add( 12 );
m_List.Add( 58 );
m_List.Add( 30 );
m_List.PrintfElement();
cout << "SetElement操作" << endl;
m_List.SetElement( 3, 100 );
m_List.PrintfElement();
cout << "Insert操作" << endl;
m_List.Insert( 1, 123 );
m_List.PrintfElement();
cout << "Delete操作" << endl;
m_List.Delete( 1 );
m_List.PrintfElement();
system("pause");
}
程序运行结果: