zoukankan      html  css  js  c++  java
  • 可变长数组

    #include <iostream>
    #include <cstring>
    
    class CArray {
        int size;
        int *ptr;
    public:
        CArray(int s = 0); 
        CArray(CArray& a);
        ~CArray();
        void push_back(int v);
        CArray& operator=(const CArray& a);
        int length() {return size;}
        int& CArray::operator[](int i) {
            return ptr[i];
        }
    };
    
    CArray::CArray(int s):size(s) {
        if (s == 0)
            ptr = NULL;
        else 
            ptr = new int[s];
    }
    
    CArray::CArray(CArray& a) {
        if (!a.ptr) {
            ptr = NULL;
            size = 0;
            return ;
        }
        ptr = new int[a.size];
        memcpy(ptr, a.ptr, sizeof(int) * a.size);
        size = a.size;
    }
    
    CArray::~CArray() {
        if (ptr)
            delete []ptr;
    }
    
    CArray& CArray::operator=(const CArray& a) {
        if (ptr == a.ptr)
            return *this;
        if (a.ptr == NULL) {
            if (ptr) delete []ptr;
            ptr = NULL;
            size = 0;
            return *this;
        }
    
        if (size < a.size) {
            if (ptr)
                delete []ptr;
            ptr = new int[a.size];
        }
        memcpy(ptr, a.ptr, sizeof(int) * a.size);
        size = a.size;
        return *this;
    }
    
    void CArray::push_back(int v) {
        if (ptr) {
            int *tmpPtr = new int[size+1];
            memcpy(tmpPtr, ptr, sizeof(int) * size);
            delete []ptr;
            ptr = tmpPtr;
        } else 
            ptr = new int[1];
        ptr[size++] = v;
    }
    

      

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    博客样式备份
    2018年终总结
    技术博客的太监
    LeetCode 日常填坑
    互联网之父
    TotoiseSVN的使用方法
    常用CMD命令
    量化策略
    浏览器加载js的阻塞与非阻塞
    Vue核心之数据劫持
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10150889.html
Copyright © 2011-2022 走看看