通过自定义的 Array 类来实现变长数组

Posted 祥云湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过自定义的 Array 类来实现变长数组相关的知识,希望对你有一定的参考价值。

有些较老的编译器不支持 变长数组 ,例如 VC6.0、VS2010 等,这有时候会给编程带来不便,下面我们通过自定义的 Array 类来实现变长数组。具体的例子来说明显式定义拷贝构造函数的必要性。
#include <iostream>
#include <cstdlib>
using namespace std;

//变长数组类
class Array
public:
    Array(int len);
    Array(const Array &arr);  //拷贝构造函数
    ~Array();
public:
    int operator[](int i) const  return m_p[i];   //获取元素(读取)
    int &operator[](int i) return m_p[i];   //获取元素(写入)
    int length() const  return m_len; 
private:
    int m_len;
    int *m_p;
;

Array::Array(int len): m_len(len)
    m_p = (int*)calloc( len, sizeof(int) );


Array::Array(const Array &arr)  //拷贝构造函数
    this->m_len = arr.m_len;
    this->m_p = (int*)calloc( this->m_len, sizeof(int) );
    memcpy( this->m_p, arr.m_p, m_len * sizeof(int) );


Array::~Array() free(m_p); 

//打印数组元素
void printArray(const Array &arr)
    int len = arr.length();
    for(int i=0; i<len; i++)
        if(i == len-1)
            cout<<arr[i]<<endl;
        else
            cout<<arr[i]<<", ";
        
    


int main()
    Array arr1(10);
    for(int i=0; i<10; i++)
        arr1[i] = i;
    
   
    Array arr2 = arr1;
    arr2[5] = 100;
    arr2[3] = 29;
   
    printArray(arr1);
    printArray(arr2);
   
    return 0;

以上是关于通过自定义的 Array 类来实现变长数组的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎样定义变长数组

关于如何定义一个未知大小的数组

C++中定义动态数组

C++中定义动态数组

变长 std::array 像

快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)