头文件seqlist.h
#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
typedef int DataType;
class SeqList
{
public:
SeqList()
: _array(new DataType[3])
, _capacity(3)
, _size(0)
{}
SeqList(DataType* array, size_t size)
: _array(new DataType[size])
, _capacity(size)
, _size(size)
{
for(size_t i = 0; i < size; ++i)
_array[i] = array[i];
}
SeqList(const SeqList& s);
SeqList& operator=(const SeqList& s);
~SeqList()
{
if(_array)
{
delete[] _array;
_size = 0;
_capacity = 0;
}
}
void PrintList();
void PushBack(int data);
void PopBack();
void Insert(size_t pos, DataType data);
void Erase(size_t pos);
size_t Size()const;
size_t Capacity()const;
bool Empty()const;
DataType& operator[](size_t index);
const DataType& operator[](size_t index)const;
DataType& Front();
const DataType& Front()const;
DataType& Back();
const DataType& Back()const;
void Clear();
private:
void _CheckCapacity();
private:
DataType* _array;
size_t _size;
size_t _capacity;
};
函数实现seqlist.cpp
#include "seqlist.h"
void SeqList::PrintList()
{
for( size_t i=0; i<_size; i++)
cout<<_array[i]<<" ";
cout<<endl;
}
SeqList::SeqList(const SeqList& s)
{
_array = new DataType[s._capacity];
_size = s._size;
_capacity =s._capacity;
for( size_t i=0; i<_size; i++)
{
_array[i] = s._array[i];
}
}
SeqList& SeqList::operator=(const SeqList& s)
{
_size = s._size;
_capacity = s._capacity;
delete[] _array;
_array = new DataType[_capacity];
for( size_t i=0; i<_size; i++)
{
_array[i] = s._array[i];
}
return *this;
}
void SeqList::_CheckCapacity()
{
if( _size < _capacity)
return;
_capacity+=3;
DataType* new_array = new DataType[_capacity];
for( size_t i=0; i<_size; i++)
{
new_array[i] = _array[i];
}
delete[] _array;
_array = new_array;
}
void SeqList::PushBack(int data)
{
_CheckCapacity();
_array[_size] = data;
_size++;
}
void SeqList::PopBack()
{
if( 0 == _size)
return;
_size--;
}
void SeqList::Insert(size_t pos, DataType data)
{
if( pos>_size)
return;
_CheckCapacity();
for( size_t i=_size; i>pos; i--)
{
_array[i] = _array[i-1];
}
_array[pos] = data;
_size++;
}
void SeqList::Erase(size_t pos)
{
if( pos >=_size)
return;
for( size_t i=pos; i<_size-1; i++)
{
_array[i] = _array[i+1];
}
_size--;
}
size_t SeqList::Size()const
{
return _size;
}
size_t SeqList::Capacity()const
{
return _capacity;
}
bool SeqList::Empty()const
{
return 0 == _size;
}
DataType& SeqList::operator[](size_t index)
{
assert( index<_size);
return _array[index];
}
const DataType& SeqList::operator[](size_t index)const
{
assert( index<_size);
return _array[index];
}
DataType& SeqList::Front()
{
assert( 0!=_size );
return _array[0];
}
const DataType& SeqList::Front()const
{
assert( 0!=_size );
return _array[0];
}
DataType& SeqList::Back()
{
assert( 0!=_size );
return _array[_size-1];
}
const DataType& SeqList::Back()const
{
assert( 0!=_size );
return _array[_size-1];
}
void SeqList::Clear()
{
_size = 0;
}
测试代码test.cpp
#include "seqlist.h"
int main()
{
SeqList s;
s.PushBack(1);
s.PushBack(2);
s.PushBack(3);
s.PushBack(4);
cout<<s.Front()<<endl;
cout<<s.Back()<<endl;
s.Clear();
s.PrintList();
cout<<s.Empty();
return 0;
}