代码如下:
【Seqlist.h】
#pragma once
#include <iostream>
#include <assert.h>
using namespace std;
typedef int DataType;
class Seqlist
{
public:
Seqlist()
:_array(NULL)
, _size(0)
, _capacity(0)
{}
Seqlist(const Seqlist& s) //构造函数
{
_array = (DataType*)malloc(sizeof(DataType)*s._size);
memcpy(_array, s._array, sizeof(DataType)*s._size);
_size = _capacity = s._size;
}
Seqlist& operator=(const Seqlist& s) //运算符重载
{
if (this != &s)
{
free(_array);
_array = (DataType*)malloc(sizeof(DataType)*s._size);
memcpy(_array, s._array, sizeof(DataType)*s._size);
}
return *this;
}
~Seqlist() //析构函数
{
if (_array)
{
free(_array);
_size = _capacity;
_array = NULL;
}
}
void PushBack(DataType x) //后插
{
CheckCapacity();
_array[_size++] = x;
}
void PopBack() //后删
{
assert(_size > 0);
--_size;
}
void PushFront(DataType x) //前插
{
CheckCapacity();
int end = _size - 1;
while (end >= 0)
{
_array[end + 1] = _array[end];
--end;
}
_array[0] = x;
++_size;
}
void PopFront() //前删
{
assert(_size > 0);
for (size_t i = 1; i < _size; ++i)
{
_array[i - 1] = _array[i];
}
--_size;
}
inline void Insert(size_t pos, DataType x) //指定位置插入
{
assert(pos <= _size);
CheckCapacity();
for (int end = _size - 1; end >= (int)pos; --end)
{
_array[end + 1] = _array[end];
}
_array[pos] = x;
++_size;
}
inline void Erase(size_t pos) //指定位置删除
{
assert(pos <= _size);
for (size_t i = pos + 1; i < _size; ++i)
{
_array[i - 1] = _array[i];
}
--_size;
}
inline DataType& operator[](size_t pos)
{
assert(pos < _size);
return _array[pos];
}
void CheckCapacity()
{
if (_size == _capacity)
{
_capacity = _capacity * 2 + 3;
_array = (DataType*)realloc(_array, _capacity*sizeof(DataType));
}
}
void Print() //打印
{
for (size_t i = 0; i < _size; ++i)
{
cout << _array[i] << " ";
}
cout << endl;
}
private:
DataType* _array;
size_t _size;
size_t _capacity;
};
void TestSeqlist()
{
Seqlist s;
s.PushBack(1);
s.PushBack(2);
s.Print();
s.PopBack();
s.Print();
s.PushFront(0);
s.Print();
s.PopFront();
s.Print();
s.Insert(0, 30);
s.Print();
}
【test.cpp】
#include "Seqlist.h"
int main()
{
TestSeqlist();
return 0;
}