#include<iostream>
using namespace std;
template<class T>
class SeqList{
public:
SeqList(T* array,int size)
:_array(new T[size])
,_capacity(size)
,_size(0)
{
for(int i=0; i<size; ++i){
_array[i] = array[i];
}
_size = size;
}
void CheckCapacity(){
int NewCapacity = _capacity*2;
if(_size == _capacity){
T* tmp = new T[NewCapacity];
for(int i=0; i<_size; ++i){
tmp[i] = _array[i];
}
delete[] _array;
_array = tmp;
_capacity = NewCapacity;
}
}
//尾插
void SeqListPushBack(T data){
CheckCapacity();
_array[_size] = data;
_size+=1;
}
~SeqList(){
if(_array){
delete[] _array;
_array = nullptr;
_size = 0;
_capacity = 0;
}
}
int SeqListEmpty(){
return _size == 0;
}
//尾删
void SeqListPopBack(){
if(SeqListEmpty()){
return;
}else{
_size-=1;
}
}
//头插
void SeqListPushFront(T data){
CheckCapacity();
for(int i=_size; i>0; --i){
_array[i] = _array[i-1];
}
_array[0] = data;
_size+=1;
}
//头删
void SeqListPopFront(){
if(SeqListEmpty()){
return;
}else{
for(int i=0; i<_size-1; ++i){
_array[i] = _array[i+1];
}
_size-=1;
}
}
//任意位置插入
void SeqListInsertPush(int pos,T data){
if(pos<0||pos>_size)
return;
for(int i=_size; i>pos; --i){
_array[i] = _array[i-1];
}
_array[pos] = data;
_size+=1;
}
//任意位置删除
void SeqListErasePop(int pos){
if(pos<0||pos>_size)
return;
else{
for(int i=pos; i<_size-1; ++i){
_array[i] = _array[i+1];
}
_size-=1;
}
}
//查找值为data的元素
int SeqListFindData(int data){
for(int i=0; i<_size; ++i){
if(_array[i] == data){
cout<<"找到了,下标是"<<i<<endl;
return i;
}
}
cout<<"没找到!!!"<<endl;
}
//删除值为data的元素
void SeqListremoveElements(T data){
int count = 0;
if(SeqListEmpty())
return;
else{
for(int i=0; i<_size; ++i){
if(_array[i] == data){
count++;
}else{
_array[i-count] = _array[i];
}
}
_size-=count;
}
}
void SeqListPrint(){
for(int i=0; i<_size; ++i){
cout<<_array[i]<<" ";
}
cout<<endl;
}
private:
T* _array;
int _size;
int _capacity;
};
测试部分
#include"SeqList.hpp"
int main(){
int array[] = {0,1,2,3,4,5,6,7,8,9};
int size = sizeof(array)/sizeof(array[0]);
SeqList<int>s(array,size);
s.SeqListPushBack(10);
s.SeqListPushBack(20);
s.SeqListPrint();
s.SeqListPopBack();
s.SeqListPopBack();
s.SeqListPrint();
s.SeqListPushFront(-1);
s.SeqListPushFront(-2);
s.SeqListPrint();
s.SeqListPopFront();
s.SeqListPopFront();
s.SeqListPrint();
s.SeqListInsertPush(200,10);
s.SeqListInsertPush(10,10);
s.SeqListInsertPush(10,10);
s.SeqListInsertPush(10,10);
s.SeqListInsertPush(10,10);
s.SeqListInsertPush(10,10);
s.SeqListInsertPush(-100,-1);
s.SeqListPrint();
s.SeqListErasePop(11);
s.SeqListErasePop(0);
s.SeqListPrint();
s.SeqListPushBack(1);
s.SeqListPushBack(1);
s.SeqListPushBack(1);
s.SeqListPrint();
s.SeqListFindData(100);
s.SeqListremoveElements(1);
s.SeqListPrint();
return 0;
}