C++ 可变数组实现
作者:互联网
话不多说,直接上代码,看注释
template<class T> // 支持传入泛型,但string这种可变长度的类型还不支持 class Array { int mSize = 0, mCapacity; // 数组元素个数; 数组容量 T *mPosition; // 数组首地址 public: // 数组初始化,输入参数小于0,默认为5的数组 explicit Array(int capacity = 5) : mCapacity(capacity) { mPosition = new T[mCapacity]; // 在堆区申请内存 } // 析构函数 ~Array() { delete[] mPosition; // 释放堆区空间 mPosition = nullptr; } // 向数组内添加元素 void add(T value) { // 当前元素等于容量 if (mSize == mCapacity) { mCapacity += 5; T *newPosition = new T[mCapacity]; // 每次申请5个 memcpy(newPosition, mPosition, mSize * sizeof(T)); // 把原数组的数据拷贝进新数组 mPosition = newPosition; // 指针指向更新 } *(mPosition + mSize) = value; // 向数组中添加元素 mSize++; } // 获取数组内指定索引的元素 T get(int position) { if (position > mSize || position < -(mSize)) throw out_of_range("数组越界"); // 输入参数越界时,抛出异常 position = position < 0 ? position + mSize : position; // 支持负索引,最后一个索引为-1 return *(mPosition + position); } // 获取当前元素个数 int size() const { return mSize; } // 重载[]运算符,可以使用索引获取 T operator[](int position) { if (position >= mSize || position < -(mSize)) throw out_of_range("数组越界"); // 输入参数越界时,抛出异常 position = position < 0 ? position + mSize : position; // 支持负索引,最后一个索引为-1 return *(mPosition + position); } };
如有问题,感谢批评指正
标签:mPosition,int,C++,mSize,数组,可变,mCapacity,position 来源: https://www.cnblogs.com/microDeLe/p/15364291.html