zoukankan      html  css  js  c++  java
  • 短小精悍的小程序,留作以后放入库中

    1.vector内存释放

    template<typename T> void erasevt(vector<T>& vt)
    {
        vector<T> temp;
        temp.swap(vt);
    }

    2.使用多态实现线性表,具有线性表的基本操作:插入、删除、测长

    //抽象基类
    template<typename T> struct Tcontainer
    {
        virtual void push(const T&) = 0;
        virtual void pop() = 0;
        virtual const T& begin() = 0;
        virtual const T& end() = 0;
        virtual size_t size() = 0;
    };
    
    template<typename T>
    struct tvector :public Tcontainer<T>
    {
        static const size_t _step = 100;
    
        tvector():_size(0),_cap(_step),buff(NULL)
        {
            re_capacity(_cap);
        }
    
        ~tvector()
        {
            free buff;
        }
    
        virtual void push(const T& vt)
        {
            if (_size >= _cap)
            {
                re_capacity(_cap += _step);
            }
            buff[_size++] = v;
        }
    
        virtual void pop()
        {
            if (_size)
                _size--;
        }
    
        virtual const T& begin()
        {
            return buff[0];
        }
    
        virtual const T& end()
        {
            if (_size)
                return buff[_size - 1];
        }
    
        virtual size_t size()
        {
            return _size;
        }
    
        const T& operator[] (size_t n)
        {
            if (n >= 0 && n < _size)
                return buff[n];
        }
    
    private:
    
        void re_capacity(const size_t n)
        {
            if (n <= 0) return;
    
            if (!buff)
            {
                buff = (T*)malloc(sizeof(T)*n);
            }
            else {
                buff = (T*)realloc(buff, sizeof(T)*n);
            }
        }
    
    private:
        size_t _size; //实际元素个数
        size_t _cap;  //已分配容量
        T* buff;      //首地址
    };

    思路蛮巧妙的。

    3.辗转相除法

    //辗转相除法(求两个数字的最大公约数)
    int gcd(unsigned int m, unsigned int n)
    {
        if (m < n) //选取最小数字作为除数
        {
            int t = m;m = n;n = t;
        }
        if (m%n)
            return gcd(n, m%n);
        else return n;
    }
  • 相关阅读:
    HDU 1501 Zipper(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1254 推箱子(BFS)
    HDU 1045 Fire Net (DFS)
    HDU 2212 DFS
    HDU 1241Oil Deposits (DFS)
    HDU 1312 Red and Black (DFS)
    HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
    HDU 1022 Train Problem I(栈)
    HDU 1008 u Calculate e
  • 原文地址:https://www.cnblogs.com/jason1990/p/4751078.html
Copyright © 2011-2022 走看看