ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C++小实践--自定义数组

2026/8/12 6:12:28 拓冰建站 浏览量
C++小实践--自定义数组

要求

案例描述:实现一个通用的数组类,要求如下

  • 可以对内置数据类型以及自定义数据类型的数据进行存储
  • 将数组中的数据存储到堆区
  • 构造函数中可以传入数组的容量
  • 提供对应的拷贝构造函数以及operator=防止浅拷贝问题
  • 提供尾插法和尾删法对数组中的数据进行增加和删除
  • 可以通过下标的方式访问数中的元素
  • 可以获取数组中当前元素个数和数组的容量

myArray.hpp

#pragma once //防止文件被重复包含
#include "iostream"using namespace std;template <class T>
class myArray{
private:T *t;int capacity;int size;
public:myArray(){capacity = 5;size = 0;t=new T[capacity];}//有参构造函数myArray(int cap):t(new T[cap]),capacity(cap),size(0){//cout<<"有参构造"<<endl;}myArray(const myArray&a){//cout<<"拷贝构造"<<endl;this->size = a.size;this->capacity = a.capacity;this->t = new T[a.capacity];for (int i = 0; i < a.size; ++i) {this->t[i] = a.t[i];}}myArray& operator=(const myArray &a){//原先堆中有数据那么先清空  要返回引用 因为就是自己本身 thisif (this->t!= nullptr){delete[]t;t= nullptr;capacity=0;size=0;}//cout<<"等号重载"<<endl;capacity=a.capacity;size=a.size;t=new T[capacity];for (int i = 0; i < size; ++i) {t[i] = a.t[i];}return *this;}~myArray(){if (t!= nullptr){delete[]t;t = nullptr;}//cout<<"析构函数"<<endl;}//尾插法bool pushBack(const T&t){if (capacity==size)return false;this->t[size] = t;size++;return true;}//尾删法bool popBack(){if (size==0)return false;this->size--;return true;}//通过下标方式访问数组元素//函数调用的结果要作为左值存在,返回引用T& operator[](int index){if (index>size||index<0)throw "下标越界";return this->t[index];}//返回容量int getCapacity(){return capacity;}//返回大小int getSize(){return size;}
};