码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 模板实现顺序表

时间:2016-03-31 07:12:11      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:c++ 模板实现模板

 /************************************

          WZ ASUST   2016
         顺序表 第二个模板

************************************/
#include"wz.h"
#include"sts.h"
template <typename T>
class seqlist
{
public:
seqlist()
:_data(NULL)
,_size(0)
,_capacity(0)
{
CheckCapacity();
}
/*seqlist(const T& d)
:_data(d._data)
,_size(d._size)
,_capacity (d._capacity)
{

}
}*/
~seqlist()
{
if(_data!=NULL)
    delete [] _data;
}
public:
void CheckCapacity()
{
if(_size == _capacity)
{
T* tmp=new T[2*_capacity+3];
memcpy(tmp,_data,_size*sizeof(T));
delete _data;
_data = tmp;
_capacity =2*_capacity+3 ;
} 
}
public:
void PushBack(const T& d);
void PopBack();
void PushFront(const T& d);
void PopFront();
        void Insert(const size_t pos, const T& x);
        void Erase(const size_t pos);
        int Find(const T& x);
        void reverse();
void Print()
{
int i=0;
for(i=0;i<_size;i++)
{
cout<<_data[i]<<" ";
}
cout<<endl;
}
private:
T* _data;
int _size;
int _capacity;
};
template <typename T>
void seqlist<T>:: PushBack(const T& d)
{
CheckCapacity();
_data[_size] = d;
_size++;
}
template <typename T>
void seqlist<T>:: PopBack()
{
if(_data == NULL)
{
return;
}
_size--;
}
template <typename T>
void seqlist<T>:: PushFront(const T& d)
{
CheckCapacity();
int i=0;
for(i=_size;i>0;--i)
{
_data[i] = _data[i-1];
}
_data[i] = d;
++_size;
}
template <typename T>
void seqlist<T>::PopFront()
{
int i=0;
for(i=0;i<_size;i++)
{
_data[i-1] = _data[i];
}
--_size;
}
template<typename T>
void seqlist<T>::Insert(const size_t pos, const T& x)
{
CheckCapacity ();
int i=0;
for(i=_size;i>pos;--i)
{
_data[i] = _data[i-1];
}
_data[i]=x;
++_size;
}
template<typename T>
void seqlist<T>::Erase(const size_t pos)
{
int i = 0;
for(i=pos;i<_size-1;i++)
{
_data[i] = _data[i+1];
}
--_size;
}
template<typename T>
int seqlist<T>::Find(const T& x)
{
int i=0;
for(i=0;i<_size;i++)
{
if(_data[i]== x)
return i;
}
return -1;
}
template<typename T>
void seqlist<T>::reverse( )
{
   int i=0,j;
   T  tmp;
   for(i,j=_size-1;i<j;i++,j--)
{
        tmp=_data[i];  
        _data[i]=_data[j];
        _data[j]=tmp;
        }
}


//void Test1()
//{
// seqlist<int> s1;
// s1.PushBack(1);
// s1.PushBack(2);
// s1.PushBack(3);
// s1.PushBack(4);
// s1.Print();
//}
//void Test2()
//{
// seqlist<int> s1;
// s1.PopBack();
//}
//void Test3()
//{
// seqlist<int> s1;
// s1.PopFront();
//}
//void Test4()
//{
// seqlist<int> s1;
// s1.PushFront(1);
// s1.PushFront(2);
// s1.PushFront(3);
// s1.PushFront(4);
//
//template <typename T>
int main()
{
seqlist<int> s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.PopBack();
s1.Print();
s1.PushFront(5);
s1.Print();
s1.PopFront();
s1.Print();
s1.Insert(2,5);
s1.Print();
s1.Erase(2);
cout<<"wzzx"<<endl;
s1.Print();
s1.Find(2);
cout<<"wzzx2"<<endl;
          s1.reverse();
s1.Print();
 
return 0;
}

c++ 模板实现顺序表

标签:c++ 模板实现模板

原文地址:http://sts609.blog.51cto.com/11227442/1758670

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!