话不多说,直接上代码,看注释

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);
}
};

如有问题,感谢批评指正

最新文章

  1. c++整型-&gt;字符型转换
  2. Win10如何设置防火墙开放特定端口 windows10防火墙设置对特定端口开放的方法
  3. 关于停止AsyncTask和Thread的问题
  4. Java高效编程之一【创建和销毁对象】
  5. Redis系列-存储篇list主要操作函数小结
  6. OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
  7. HDU-3473Minimum Sum
  8. SpringMVC(二) —— 中文乱码处理
  9. jqGrid笔记@简单实现
  10. Windows server 2008搭建php运行环境
  11. [INS-30060]:Check for group existence failed
  12. 微信小程序如何开发制作
  13. jsp中的绝对路径、相对路径和访问jsp的方式
  14. KMP模板(HDU1711)
  15. dataguard从库数据库丢失恢复例子(模拟所有的控制文件)
  16. activate-power-mode 插件 安装 设置 IDEA
  17. wordpress入门
  18. Asp.net Vnext 自定义日志
  19. 最长上升子序列(LIS)n2 nlogn算法解析
  20. sql:SQL Server metadata queries

热门文章

  1. 如何在github上传本地项目代码
  2. 深入浅出Mybatis系列(三)---配置简介(mybatis源码篇)
  3. redis《三》连接池配置参数
  4. IoT边缘,你究竟是何方神圣?
  5. Java网络编程之TCP
  6. constexpr-C++11
  7. 设置 ajax 同步获取数据
  8. Jenkins手动下载并安装插件
  9. HCNP Routing&amp;Switching之OSPF特殊区域
  10. NOIP模拟38:a