简单的动态数组类,支持添加元素、访问元素和自动扩展。

简单的动态数组类,支持添加元素、访问元素和自动扩展。

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;
}
posted @ 2025-08-04 10:33  xiaoluosibky  阅读(11)  评论(0)    收藏  举报