爱学习520 发表于 2020-8-10 08:58:38

Vector的底层实现,附上可执行代码,欢迎提出优化改进

本帖最后由 爱学习520 于 2020-8-10 09:12 编辑

昨天写到现在,实现Vector的底层实现,代码相对而言比较简单,应该都可以看懂,我把注释写的很清楚,结构也很明确


Vector类的实现:


#include<iostream>
#include<string.h>
#defineSUCCESS          1      //成功
#define INDEX_ERROR      -1   // 错误的索引号   
using namespace std;

//定义Vector类
template<class T_ELE>
class Vector
{
private:
        int InitSize;
        int Len;
        int Index;
        int Increment;
        T_ELE* pVector;
private:
        bool expand()
        {
                int tlen;
                T_ELE* pNew;
                //计算扩容后的长度
                tlen = Len + Increment;
                //重新申请适应新的需要的空间大小
                pNew = new T_ELE;
                //将原来的空间的数据复制到新申请的空间
                memcpy(pNew, pVector, Len * sizeof(T_ELE));
                //释放原先的空间
                delete[] pVector;
                pVector = pNew;
                //修改其他对应的值
                Len = tlen;
                return SUCCESS;
        }

public:
        Vector():InitSize(10),Increment(5)
        {
                //分配空间
                pVector = new T_ELE;
                //初始化申请的空间
                memset(pVector, 0, InitSize * sizeof(T_ELE));
                //初始化其他变量
                Len = InitSize;
                Index = 0;
        }
        Vector(int size) :Increment(5)
        {
                //分配空间
                pVector = new T_ELE;
                //初始化
                memset(pVector, 0, size * sizeof(T_ELE));
                //其他变量初始化
                Len = size;
                Index = 0;
        }
        ~Vector()
        {
                //释放申请的堆空间
                delete[] pVector;
                pVector = nullptr;
        }

public:
        void push_back(T_ELE Element)
        {
                //判断是否需要增容
                if (Index >= Len)
                        expand();
                //将新的元素放到最后一个位置
                pVector = Element;
                //修改对应的变化值
                Index++;
        }
       
        int insert(int index, T_ELE Element)
        {
                //检测插入的区间是否有误
                if (index < 1 || index > Index + 1)
                {
                        cout << index<<"不在区域范围,插入错误!" << endl;
                        return INDEX_ERROR;
                }               
                //判断是否需要扩容
                if (Index >= Len)
                        expand();
                //插入位置的元素和插入元素之后的所有元素后移
                memcpy(&pVector, &pVector, (Index - index+1 ) * sizeof(T_ELE));
                pVector = Element;

                //对应的其他成员值的变化
                Index++;
                return 0;
        }

        int at(int index)
        {
                //判断索引是否在合理区间
                if (index<1 || index>Index)
                {
                        cout<<index << "不在区域内,查找越界" << endl;
                        return INDEX_ERROR;
                }
                //返回该索引对应的值
                return pVector;
        }
};

测试案例:
#include "Vector.cpp"

//测试函数
int main()
{
        Vector<int> s(5);
        s.push_back(1);
        s.push_back(2);
        s.push_back(3);
        s.push_back(4);
        s.push_back(5);

        //测试增容
        s.push_back(6);

        //测试插入的临界错误区域
        s.insert(0,520);
        s.insert(8,520);

        //测试插入的临界正确区域
        s.insert(1,520);
        s.insert(3,520);
        s.insert(7,520);

        //显示经上述测试后目前Vector里面的元素,以判断是否正确,或者通过调试查看
        for (int i = 0; i < 9; i++)
                cout << s.pVector << endl;

        //最后测试at函数
        s.at(0);
        s.at(4);
        s.at(9);
        s.at(10);
       
        return 0;
}

页: [1]
查看完整版本: Vector的底层实现,附上可执行代码,欢迎提出优化改进