欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

模擬實現(xiàn)stl中的list-創(chuàng)新互聯(lián)

list中的接口有sort(默認是按照由小到大的順序排,可以更改排序方式,也可排完后調用reverse()逆置)
模擬實現(xiàn)list即將list中的函數(shù)模擬實現(xiàn),同樣也分為五部分:構造與析構、容量、迭代器、元素訪問、元素修改。
需要注意的問題是list中的迭代器,與vector中不同的是list不是順序結構,所以我們要對迭代器進行封裝,其使用規(guī)則也要在這個封裝中自定義給出。vector中的使用原生態(tài)指針即可。
代碼如下:

紹興ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
#include<iostream>
using namespace std;

namespace mine//自己定義的命名空間,為了防止與庫中的list沖突
{

    template <class T>//定義了一個節(jié)點類
    class ListNode
    {
        public:
        ListNode(const T &data=T())//沒有傳參的話調用T類型對象的默認構造函數(shù)
        :_pPre(nullptr)
        , _pNext(nullptr)
        , _data(data)
        {
        }
        ListNode<T>*_pPre;
        ListNode<T>*_pNext;
        T _data;
    };

    template<class T>
    class Iterator
    {
    public:
        typedef ListNode<T> Node;//對節(jié)點類重命名,方便后面的使用
        typedef Iterator<T> Self;
        Iterator(Node *cur)//構造函數(shù)
            :_pCur(cur)
        {
        }

        T& operator *()//按照指針的方式進行引用
        {
            return _pCur->_data;
        }

        T *operator ->()
        {
            return &(_pCur->_data);
        }

        Self& operator++()//前置++
        {
            _pCur = _pCur->_pNext;
            return *this;
        }

        Self& operator++(int)//后置++
        {
            Self tmp(*this);
            _pCur = _pCur->_pNext;
            return *tmp;
        }

        Self& operator--()//前置--
        {
            _pCur = _pCur->_pPre;
            return *this;
        }

        Self &operator--(int)//后置--
        {
            Self tmp(*this);
            _pCur = _pCur->_pPre;
            return *tmp;
        }

        bool operator ==(const Self & l)
        {
            if (l._pCur==_pCur)
            {
                return true;
            }
            return false;
        }

        bool operator !=(const Self & l)
        {
            return !(_pCur == l._pCur);
        }

        Node * _pCur;
    };

    template <class T>//list類
    class list
    {
    public:
        typedef ListNode<T> Node;
        typedef Iterator<T> iterator;
    public:
        //////////////////////////////////////////////////////////////
        //構造與析構
        typedef ListNode<T> Node;//對節(jié)點類型重命名,使用起來更加方便
        list()//默認構造函數(shù),只創(chuàng)建一個頭節(jié)點
        {
            CreatHead();
        }

        list(int n, const T& val)//構造n個值為val
        {
            CreatHead();
            for (int i=0; i < n; i++)
            {
                push_back(val);
            }
        }

        template<class iterator>
        list(iterator first, iterator end)//區(qū)間構造
        {
            CreatHead();
           while (first != end)
            {
                push_back(*first);
                first++;
            }
        }

        list(const list<T> &L)//拷貝構造
        {
            CreatHead();
            Node*cur = L._phead->_pNext;
           while (cur != L._phead)
            {
                push_back(cur->_data);
                cur = cur->_pNext;
            }
        }

        list <T>& operator=(const list<T> & l)//賦值運算符的重載
        {
            if (&l != this)
            {
                clear();
                Node*cur = l._phead->_pNext;
               while (cur != l._phead)
                {
                    push_back(cur->_data);
                    cur = cur->_pNext;
                }
            }
            return *this;
        }

        ~list()
        {
            clear();
            delete _phead;
        }

        //////////////////////////////////////////////////////////////
        //迭代器
        iterator begin()
        {
            return iterator(_phead->_pNext);
        }
        iterator end()
        {
            return iterator(_phead);
        }

        //////////////////////////////////////////////////////////////
        //容量
        int size()
        {
            int size = 0;
            Node*cur = _phead->_pNext;
           while (cur != _phead)
            {
                size++;
                cur = cur->_pNext;
            }
            return size;
        }

        bool empty()
        {
            if (_phead->_pNext == _phead)
            {
                return true;
            }
            return false;
        }

        void resize(int newsize, const T&data = T())
        {
            int oldsize = size();
            if (newsize > oldsize)
            {
                for (int i = oldsize; i < newsize; i++)
                {
                    push_back(data);
                }
            else
            {
                for (int i = newsize; i < oldsize; i++)
                {
                    pop_back();
                }
            }
            }
        }

        ///////////////////////////////
        // 元素訪問
        T& front()
        {
            return _pHead->_pNext->_data;
        }

        const T& front()const
        {
            return _pHead->_pNext->_data;
        }

        T& back()
        {
            return _pHead->_pPre->_data;
        }

        const T& back()const
        {
            return _pHead->_pPre->_data;
        }

        //////////////////////////////////////////////////////////////
        //元素修改
        void push_back(const T& data)
        {
            insert(end(), data);
        }

        void pop_back()
        {
            erase(--end()); 
        }

        iterator insert(iterator pos,const T& data)
        {
            Node*cur = new Node(data);
            Node*tmp = pos._pCur;
            cur->_pNext = tmp;
            cur->_pPre = tmp->_pPre;
            cur->_pPre->_pNext = cur;
            tmp->_pPre = cur;
            return iterator(cur);
        }

        iterator erase(iterator pos)
        {
            Node*del = pos._pCur;
            if (del == _phead)
            {
                return end();
            }
            Node *ret = del->_pNext;
            del->_pPre->_pNext = del->_pNext;
            del->_pNext->_pPre = del->_pPre;
            delete del;
            return iterator(ret);
        }

        void clear()//頭刪
        {
            Node *cur = _phead->_pNext;
           while (cur != _phead)
            {
                _phead->_pNext = cur->_pNext;
                delete cur;
                cur = _phead->_pNext;
            }
            _phead->_pNext = _phead;
            _phead->_pPre = _phead;
        }

    private:
        void CreatHead()
        {
            _phead = new Node;
            _phead->_pPre = _phead;
            _phead->_pNext = _phead;
        }
    private:
        Node* _phead;
    };
};

int main()
{
    mine::list<int> l(5,10);
    mine::list<int> s(l);
    for (auto e : s)
    {
        cout << e;
    }
    system("pause");
    return 0;
}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享名稱:模擬實現(xiàn)stl中的list-創(chuàng)新互聯(lián)
分享地址:http://aaarwkj.com/article48/csochp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站內鏈微信小程序、企業(yè)網站制作、企業(yè)建站、用戶體驗靜態(tài)網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站網頁設計
欧美护士激情第一欧美精品| 亚洲av蜜臀在线播放| 91无人区一区二区三乱码| 中文字幕久久一区二区三区| 狠狠综合久久av一区二区大宝| 午夜福利视频在线观看| 国产精品国产亚洲精品| 中文字幕人妻少妇美臀| 中文字幕不卡在线观看不卡| 和富婆啪啪一区二区免费看| 91麻豆精品国产91久| 黄片欧美视频在线观看| 未满十八禁在线观看免费| 亚洲成人av在线蜜桃| 国产91美女黄色在线观看| 91人妻成人精品一区二区| 国产欧美亚洲精品一区二区| 国产三级精品正在播放| 日韩有码高清av在线| 欧美日韩免费爱爱视频| 久久国产精品99亚洲| 日韩经典三级精品自拍| 五月激情开心久久婷婷| 久草热不卡的av在线| 日韩不卡免费在线视频| 99热这里只有精品网址| 国产乱来视频在线观看| 成年爽片在线观看播放欧美| 国产看片色网站亚洲av| 成人一区二区三区乱码| 亚洲av日韩av一区| 69国产精品久久久久久人| 在线精品91国产在线观看| 国产日韩综合精品一区| 日韩成人激情在线观看| 亚洲成人日韩成人av| 欧美日韩精品一区二区在线| 久久中文字幕一区二区三区| 成人av高清在线观看| 亚洲国产成在人网站天堂 | 亚洲日本香蕉视频观看视频|