代碼內容:利用鏈表實現迷你向量方法
· 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++; //空間增大
}