代码内容:利用链表实现迷你向量方法
· Minivector ·
template <typename T>
class miniVectorList
{
public:
miniVectorList(); //初始化定义
miniVectorList(int size); //链表大小
bool empty() const; //判空
int size() const; //输入链表大小
void insert(T item, int pos); //在指定位置插入
void erase(int pos); //指定位置删除
friend ostream &operator<<(ostream &out, const miniVectorList &aList);
private:
T *vArr; //初始化链表
int vSize; //输入实际大小
int vCapacity; //输入默认总大小
void reserve(int n, bool copy); //扩大数组空间
};
template <typename T>
void miniVectorList<T>::reserve(int n, bool copy)
{
int *newArr; //定义数组
int i;
newArr = new int[n]; //新建整型数组空间
if (newArr == NULL) //建立失败抛出错误
throw memoryAllocationError(
"miniVector reserve(): memory allocation failure");
if (copy) //如果原数组不是空的则将原数组传入新建的数组
for (i = 0; i < vSize; i++)
newArr[i] = vArr[i];
if (vArr != NULL)
delete[] vArr; //传递完毕后删除原数组
vArr = newArr; //把新空间给原来的空间
vCapacity = n; //主要就是这一步,扩大了默认总空间大小
}
template <typename T>
miniVectorList<T>::miniVectorList() //初始化列表
{}
== == == == == == == == == == == == == == == == == == == == == == == == ==
template <typename T>
miniVectorList<T>::miniVectorList(int size) : vSize(0),
vCapacity(0), vArr(NULL) //输入链表大小,初始化实际大小为0,真实大小为0,数组vArr为空
{
int i;
if (size == 0)
return; //如果大小为0直接结束
reserve(size, false); //因为大小已经为0然后用这一步建立大小为1的空间
vSize = size; //实际大小等于真实大小
for (i = 0; i < vSize; i++)
{
vArr[i] = 0; //初始化所有的数组元素为0
}
}
template <typename T>
bool miniVectorList<T>::empty() const //判空,如果默认大小为0为false
{
return vSize == 0;
}
template <typename T>
int miniVectorList<T>::size() const //读取出实际大小
{
return vSize;
}
template <typename T>
ostream &operator<<(ostream &out, const miniVectorList<T> &aList) //重载
{
for (int i = 0; i < aList.vSize; i++)
out << aList.vArr[i] << " ";
return out;
}
template <typename T>
void miniVectorList<T>::erase(int pos) //删除指定位置元素
{
if (vSize == 0)
{
cerr << "*** List is empty ***\n";
return;
} //判空
if (pos < 0 || pos >= vCapacity) //位置判断是否正确,抛错
{
cerr << "Illegal location to delete -- " << pos
<< ". List unchanged. ***\n";
return;
}
for (int i = pos; i < mySize; i++) //从删除位置处后边向前提前一位
vArray[i] = vArray[i + 1];
vSize--; //实际大小减小
}
template <typename T>
void miniVectorList<T>::insert(T item, int pos) //指定位置插入
{
if (vSize == vCapacity) //数组空间已满抛出错误
{
cerr << "*** No space for list element -- terminating "
"execution ***\n";
exit(1);
}
if (pos < 0 || pos > vCapacity) //位置错误抛错{
cerr << "*** Illegal location to insert -- " << pos
<< ". List unchanged. ***\n";
return;
}
for (int i = mySize; i > pos; i--) //把pos位置空出来
vArray[i] = vArray[i - 1];
vArray[pos] = item;
vSize++; //空间增大
}