简单的动态数组类,支持添加元素、访问元素和自动扩展。
DynamicArray.h
//
// Created by lyx on 2025/8/4.
//
#ifndef LEARNC___DYNAMICARRAY_H
#define LEARNC___DYNAMICARRAY_H
#include <iostream>
class DynamicArray {
public:
// 构造函数
DynamicArray();
// 析构函数
~DynamicArray();
// 添加元素
void add(int value);
// 获取元素
[[nodiscard]] int get(size_t index) const;
// 获取元素个数
[[nodiscard]] size_t getSize() const;
private:
void resize(size_t new_capacity); // 扩容
size_t _capacity; // 容量
size_t _size{}; // 元素个数
int * _data; // 数据
};
#endif //LEARNC___DYNAMICARRAY_H
DynamicArray.cpp
//
// Created by lyx on 2025/8/4.
//
#include "DynamicArray.h"
// 构造函数
DynamicArray::DynamicArray() : _capacity(2), _data((int *) malloc(_capacity * sizeof(int))){
if (_data == nullptr){ // 申请内存失败 抛出异常
throw std::bad_alloc();
}
}
// 析构函数
DynamicArray::~DynamicArray(){
free(_data);
}
// 添加元素
void DynamicArray::add(int value){
// 若当前元素数量和容量相等,就无法继续添加元素,调用扩容函数,进行扩容
if(_size == _capacity){
resize(_capacity * 2);
}
_data[_size++] = value; // _data下标从零开始, _size下标对应的位置可以存储
}
// 获取元素
int DynamicArray::get(size_t index) const{
if(index >= _size){
throw std::out_of_range("Index out of range!");
}
return _data[index];
}
// 获取元素个数
size_t DynamicArray::getSize() const{ return _size;}
// 扩容
void DynamicArray::resize(size_t new_capacity){
// 申请内存 尝试在原位置扩展内存块,若原位置扩展不了就重新申请一个更大内存块,返回新指针
int * temp = (int *) realloc(_data, new_capacity * sizeof(int));
// 若未申请成功
if (temp == nullptr) {
// 抛出异常
throw std::bad_alloc();
}
_data = temp; // 更新地址
_capacity = new_capacity; // 更新容量
}
main.cpp
//
// Created by lyx on 2025/8/2.
//
#include <iostream>
#include "DynamicArray.h"
int main(){
DynamicArray arr;
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
std::cout << "Arr size : " << arr.getSize() << std::endl;
std::cout << "Arr[0] : " << arr.get(0) << std::endl;
return 0;
}