C++ 可变数组实现
2024-10-19 15:38:02
话不多说,直接上代码,看注释
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);
}
};
如有问题,感谢批评指正
最新文章
- c++整型->;字符型转换
- Win10如何设置防火墙开放特定端口 windows10防火墙设置对特定端口开放的方法
- 关于停止AsyncTask和Thread的问题
- Java高效编程之一【创建和销毁对象】
- Redis系列-存储篇list主要操作函数小结
- OpenFlow Switch学习笔记(五)——Group Table、Meter Table及Counters
- HDU-3473Minimum Sum
- SpringMVC(二) —— 中文乱码处理
- jqGrid笔记@简单实现
- Windows server 2008搭建php运行环境
- [INS-30060]:Check for group existence failed
- 微信小程序如何开发制作
- jsp中的绝对路径、相对路径和访问jsp的方式
- KMP模板(HDU1711)
- dataguard从库数据库丢失恢复例子(模拟所有的控制文件)
- activate-power-mode 插件 安装 设置 IDEA
- wordpress入门
- Asp.net Vnext 自定义日志
- 最长上升子序列(LIS)n2 nlogn算法解析
- sql:SQL Server metadata queries