在实际的开发过程中经常遇到不能确定数组长度的场景,按照最大内存分配会造成空间浪费,因此需要使用动态数组的方式解决问题。编写一个长度可变的数组类,该类的对象就能存放可变的长数组。该数组类应该有以下特点:

#include <iostream> #include <string> using namespace std; class CArray { public: CArray() = default; CArray(int lens); CArray(const CArray& a); CArray& operator = (const CArray& a); //用于数组对象间的赋值 ~CArray(); int front() { return ptr[0]; } //访问首元素 void push_back(int num); //用于在数组尾部添加一个元素num int size() const { return length; } //返回数组元素个数 int& operator[](int i)//重载下标运算符 { return ptr[i]; }; private: int length; //数组元素的个数 int* ptr; //指向动态分配的数组 }; CArray::CArray(int lens) : length(lens) { lens == 0 ? ptr = nullptr : ptr = new int[lens]; } CArray::CArray(const CArray& a) { if (!a.ptr) { ptr = nullptr; length = 0; return; } ptr = new int[a.length]; memcpy(ptr, a.ptr, sizeof(int) * a.length); length = a.length; } CArray::~CArray() { if (ptr) delete[] ptr; } CArray& CArray::operator=(const CArray& a) { //赋值号的作用是使 = 左边对象中存放的数组的大小和内容都与右边的对象一样 if (ptr == a.ptr) //防止 a=a 这样的赋值导致出错 { return *this; } if (a.ptr == nullptr) { //如果a里面的数组是空的 if (ptr) { delete[] ptr; } ptr = nullptr; length = 0; return *this; } if (length < a.length) { //如果原有空间够大,就不用分配新的空间 if (ptr) { delete[] ptr; } ptr = new int[a.length]; } memcpy(ptr, a.ptr, sizeof(int) * a.length); length = a.length; return *this; } void CArray::push_back(int v) { //在数组尾部添加一个元素 if (ptr) { int* tmpPtr = new int[length 1]; //重新分配空间 memcpy(tmpPtr, ptr, sizeof(int) * length); //复制原数组内容 delete[] ptr; ptr = tmpPtr; } else //数组本来是空的 { ptr = new int[1]; } ptr[length ] = v; //加入新的数组元素 } int main() { CArray array1; //开始的数组是空的 for (int i = 0; i < 5; i) { array1.push_back(i); } CArray array2, array3; array2 = array1; for (int i = 0; i < array1.size(); i) { cout << array2[i] << " "; } cout << endl; array2 = array3; //a2 是空的 for (int i = 0; i < array2.size(); i) //a2.length()返回 0 { cout << array2[i] << " "; } cout << endl; array1[3] = 100; CArray array4(array1); for (int i = 0; i < array4.size(); i) { cout << array4[i] << " "; } cout << endl; cout << array4.front() << endl; return 0; }

运行结果:

c语言可变长数组定义(实现可变长度的动态数组)(1)

,