鏈表實現的MiniVector(C++)

代碼內容:利用鏈表實現迷你向量方法

· 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++; //空間增大
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章