亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xtree

?? C標準庫源代碼,能提高對C的理解,不錯的哦
??
?? 第 1 頁 / 共 2 頁
字號:
// tree internal header

#if     _MSC_VER > 1000 /*IFSTRIP=IGN*/
#pragma once
#endif

#ifndef _XTREE_
#define _XTREE_
#include <cstddef>
#include <iterator>
#include <memory>
#include <xutility>

#ifdef  _MSC_VER
#pragma pack(push,8)
#endif  /* _MSC_VER */
_STD_BEGIN
                // TEMPLATE CLASS _Tree
template<class _K, class _Ty, class _Kfn, class _Pr, class _A>
        class _Tree {
protected:
        enum _Redbl {_Red, _Black};
        struct _Node;
        friend struct _Node;
        typedef _POINTER_X(_Node, _A) _Nodeptr;
        struct _Node {
                _Nodeptr _Left, _Parent, _Right;
                _Ty _Value;
                _Redbl _Color;
                };
        typedef _REFERENCE_X(_Nodeptr, _A) _Nodepref;
        typedef _REFERENCE_X(const _K, _A) _Keyref;
        typedef _REFERENCE_X(_Redbl, _A) _Rbref;
        typedef _REFERENCE_X(_Ty, _A) _Vref;
        static _Rbref _Color(_Nodeptr _P)
                {return ((_Rbref)(*_P)._Color); }
        static _Keyref _Key(_Nodeptr _P)
                {return (_Kfn()(_Value(_P))); }
        static _Nodepref _Left(_Nodeptr _P)
                {return ((_Nodepref)(*_P)._Left); }
        static _Nodepref _Parent(_Nodeptr _P)
                {return ((_Nodepref)(*_P)._Parent); }
        static _Nodepref _Right(_Nodeptr _P)
                {return ((_Nodepref)(*_P)._Right); }
        static _Vref _Value(_Nodeptr _P)
                {return ((_Vref)(*_P)._Value); }
public:
        typedef _Tree<_K, _Ty, _Kfn, _Pr, _A> _Myt;
        typedef _K key_type;
        typedef _Ty value_type;
        typedef _A::size_type size_type;
        typedef _A::difference_type difference_type;
        typedef _POINTER_X(_Ty, _A) _Tptr;
        typedef _POINTER_X(const _Ty, _A) _Ctptr;
        typedef _REFERENCE_X(_Ty, _A) reference;
        typedef _REFERENCE_X(const _Ty, _A) const_reference;
                // CLASS const_iterator
        class iterator;
        class const_iterator;
        friend class const_iterator;
        class const_iterator : public _Bidit<_Ty, difference_type> {
        public:
                const_iterator()
                        {}
                const_iterator(_Nodeptr _P)
                        : _Ptr(_P) {}
                const_iterator(const iterator& _X)
                        : _Ptr(_X._Ptr) {}
                const_reference operator*() const
                        {return (_Value(_Ptr)); }
                _Ctptr operator->() const
                        {return (&**this); }
                const_iterator& operator++()
                        {_Inc();
                        return (*this); }
                const_iterator operator++(int)
                        {const_iterator _Tmp = *this;
                        ++*this;
                        return (_Tmp); }
                const_iterator& operator--()
                        {_Dec();
                        return (*this); }
                const_iterator operator--(int)
                        {const_iterator _Tmp = *this;
                        --*this;
                        return (_Tmp); }
                bool operator==(const const_iterator& _X) const
                        {return (_Ptr == _X._Ptr); }
                bool operator!=(const const_iterator& _X) const
                        {return (!(*this == _X)); }
                void _Dec()
                        {_Lockit _Lk;
                        if (_Color(_Ptr) == _Red
                                && _Parent(_Parent(_Ptr)) == _Ptr)
                                _Ptr = _Right(_Ptr);
                        else if (_Left(_Ptr) != _Nil)
                                _Ptr = _Max(_Left(_Ptr));
                        else
                                {_Nodeptr _P;
                                while (_Ptr == _Left(_P = _Parent(_Ptr)))
                                        _Ptr = _P;
                                _Ptr = _P; }}
                void _Inc()
                        {_Lockit _Lk;
                        if (_Right(_Ptr) != _Nil)
                                _Ptr = _Min(_Right(_Ptr));
                        else
                                {_Nodeptr _P;
                                while (_Ptr == _Right(_P = _Parent(_Ptr)))
                                        _Ptr = _P;
                                if (_Right(_Ptr) != _P)
                                        _Ptr = _P; }}
                _Nodeptr _Mynode() const
                        {return (_Ptr); }
        protected:
                _Nodeptr _Ptr;
                };
                // CLASS iterator
        friend class iterator;
        class iterator : public const_iterator {
        public:
                iterator()
                        {}
                iterator(_Nodeptr _P)
                        : const_iterator(_P) {}
                reference operator*() const
                        {return (_Value(_Ptr)); }
                _Tptr operator->() const
                        {return (&**this); }
                iterator& operator++()
                        {_Inc();
                        return (*this); }
                iterator operator++(int)
                        {iterator _Tmp = *this;
                        ++*this;
                        return (_Tmp); }
                iterator& operator--()
                        {_Dec();
                        return (*this); }
                iterator operator--(int)
                        {iterator _Tmp = *this;
                        --*this;
                        return (_Tmp); }
                bool operator==(const iterator& _X) const
                        {return (_Ptr == _X._Ptr); }
                bool operator!=(const iterator& _X) const
                        {return (!(*this == _X)); }
                };
        typedef reverse_bidirectional_iterator<iterator,
                value_type, reference, _Tptr, difference_type>
                        reverse_iterator;
        typedef reverse_bidirectional_iterator<const_iterator,
                value_type, const_reference, _Ctptr, difference_type>
                        const_reverse_iterator;
        typedef pair<iterator, bool> _Pairib;
        typedef pair<iterator, iterator> _Pairii;
        typedef pair<const_iterator, const_iterator> _Paircc;
        explicit _Tree(const _Pr& _Parg, bool _Marg = true,
                const _A& _Al = _A())
                : allocator(_Al),
                key_compare(_Parg), _Multi(_Marg)
                {_Init(); }
        _Tree(const _Ty *_F, const _Ty *_L,
                const _Pr& _Parg, bool _Marg = true,
                const _A& _Al = _A())
                : allocator(_Al),
                key_compare(_Parg), _Multi(_Marg)
                {_Init();
                insert(_F, _L); }
        _Tree(const _Myt& _X)
                : allocator(_X.allocator),
                key_compare(_X.key_compare), _Multi(_X._Multi)
                {_Init();
                _Copy(_X); }
        ~_Tree()
                {erase(begin(), end());
                _Freenode(_Head);
                _Head = 0, _Size = 0;
                        {_Lockit _Lk;
                        if (--_Nilrefs == 0)
                                {_Freenode(_Nil);
                                _Nil = 0; }}}
        _Myt& operator=(const _Myt& _X)
                {if (this != &_X)
                        {erase(begin(), end());
                        key_compare = _X.key_compare;
                        _Copy(_X); }
                return (*this); }
        iterator begin()
                {return (iterator(_Lmost())); }
        const_iterator begin() const
                {return (const_iterator(_Lmost())); }
        iterator end()
                {return (iterator(_Head)); }
        const_iterator end() const
                {return (const_iterator(_Head)); }
        reverse_iterator rbegin()
                {return (reverse_iterator(end())); }
        const_reverse_iterator rbegin() const
                {return (const_reverse_iterator(end())); }
        reverse_iterator rend()
                {return (reverse_iterator(begin())); }
        const_reverse_iterator rend() const
                {return (const_reverse_iterator(begin())); }
        size_type size() const
                {return (_Size); }
        size_type max_size() const
                {return (allocator.max_size()); }
        bool empty() const
                {return (size() == 0); }
        _A get_allocator() const
                {return (allocator); }
        _Pr key_comp() const
                {return (key_compare); }
        _Pairib insert(const value_type& _V)
                {_Nodeptr _X = _Root();
                _Nodeptr _Y = _Head;
                bool _Ans = true;
                { _Lockit Lk;
                        while (_X != _Nil)
                                {_Y = _X;
                                _Ans = key_compare(_Kfn()(_V), _Key(_X));
                                _X = _Ans ? _Left(_X) : _Right(_X); }
                }
                if (_Multi)
                        return (_Pairib(_Insert(_X, _Y, _V), true));
                iterator _P = iterator(_Y);
                if (!_Ans)
                        ;
                else if (_P == begin())
                        return (_Pairib(_Insert(_X, _Y, _V), true));
                else
                        --_P;
                if (key_compare(_Key(_P._Mynode()), _Kfn()(_V)))
                        return (_Pairib(_Insert(_X, _Y, _V), true));
                return (_Pairib(_P, false)); }
        iterator insert(iterator _P, const value_type& _V)
                {if (size() == 0)
                        ;
                else if (_P == begin())
                        {if (key_compare(_Kfn()(_V), _Key(_P._Mynode())))
                                return (_Insert(_Head, _P._Mynode(), _V)); }
                else if (_P == end())
                        {_Lockit Lk;
                        if (key_compare(_Key(_Rmost()), _Kfn()(_V)))
                                return (_Insert(_Nil, _Rmost(), _V)); }
                else
                        {iterator _Pb = _P;
                        if (key_compare(_Key((--_Pb)._Mynode()), _Kfn()(_V))
                                && key_compare(_Kfn()(_V), _Key(_P._Mynode())))
                                {_Lockit _Lk;
                                if (_Right(_Pb._Mynode()) == _Nil)
                                        return (_Insert(_Nil, _Pb._Mynode(), _V));
                                else
                                        return (_Insert(_Head, _P._Mynode(), _V)); }}
                return (insert(_V).first); }
        void insert(iterator _F, iterator _L)
                {for (; _F != _L; ++_F)
                        insert(*_F); }
        void insert(const value_type *_F, const value_type *_L)
                {for (; _F != _L; ++_F)
                        insert(*_F); }
        iterator erase(iterator _P)
                {_Nodeptr _X;
                _Nodeptr _Y = (_P++)._Mynode();
                _Nodeptr _Z = _Y;
                _Lockit _Lk;
                if (_Left(_Y) == _Nil)
                        _X = _Right(_Y);
                else if (_Right(_Y) == _Nil)
                        _X = _Left(_Y);
                else
                        _Y = _Min(_Right(_Y)), _X = _Right(_Y);
                if (_Y != _Z)
                        {_Parent(_Left(_Z)) = _Y;
                        _Left(_Y) = _Left(_Z);
                        if (_Y == _Right(_Z))
                                _Parent(_X) = _Y;
                        else
                                {_Parent(_X) = _Parent(_Y);
                                _Left(_Parent(_Y)) = _X;
                                _Right(_Y) = _Right(_Z);
                                _Parent(_Right(_Z)) = _Y; }
                        if (_Root() == _Z)
                                _Root() = _Y;
                        else if (_Left(_Parent(_Z)) == _Z)
                                _Left(_Parent(_Z)) = _Y;
                        else
                                _Right(_Parent(_Z)) = _Y;
                        _Parent(_Y) = _Parent(_Z);
                        std::swap(_Color(_Y), _Color(_Z));
                        _Y = _Z; }
                else
                        {_Parent(_X) = _Parent(_Y);
                        if (_Root() == _Z)
                                _Root() = _X;
                        else if (_Left(_Parent(_Z)) == _Z)
                                _Left(_Parent(_Z)) = _X;
                        else
                                _Right(_Parent(_Z)) = _X;
                        if (_Lmost() != _Z)
                                ;
                        else if (_Right(_Z) == _Nil)
                                _Lmost() = _Parent(_Z);
                        else
                                _Lmost() = _Min(_X);
                        if (_Rmost() != _Z)
                                ;
                        else if (_Left(_Z) == _Nil)
                                _Rmost() = _Parent(_Z);
                        else
                                _Rmost() = _Max(_X); }
                if (_Color(_Y) == _Black)
                        {while (_X != _Root() && _Color(_X) == _Black)
                                if (_X == _Left(_Parent(_X)))
                                        {_Nodeptr _W = _Right(_Parent(_X));
                                        if (_Color(_W) == _Red)
                                                {_Color(_W) = _Black;
                                                _Color(_Parent(_X)) = _Red;
                                                _Lrotate(_Parent(_X));
                                                _W = _Right(_Parent(_X)); }
                                        if (_Color(_Left(_W)) == _Black
                                                && _Color(_Right(_W)) == _Black)
                                                {_Color(_W) = _Red;
                                                _X = _Parent(_X); }
                                        else
                                                {if (_Color(_Right(_W)) == _Black)
                                                        {_Color(_Left(_W)) = _Black;
                                                        _Color(_W) = _Red;
                                                        _Rrotate(_W);
                                                        _W = _Right(_Parent(_X)); }
                                                _Color(_W) = _Color(_Parent(_X));
                                                _Color(_Parent(_X)) = _Black;
                                                _Color(_Right(_W)) = _Black;
                                                _Lrotate(_Parent(_X));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
风间由美一区二区三区在线观看 | 一区二区三区在线不卡| 欧美va亚洲va| 日韩欧美一级二级三级久久久| 欧美视频完全免费看| 日本高清免费不卡视频| 欧美午夜寂寞影院| 91超碰这里只有精品国产| 88在线观看91蜜桃国自产| 日韩欧美国产精品一区| 精品美女一区二区三区| 久久精品夜夜夜夜久久| 国产精品久久久久久久久免费樱桃| 中文字幕欧美日本乱码一线二线| 国产精品视频一二| 亚洲日本电影在线| 日韩精品一区第一页| 精品中文av资源站在线观看| 国产不卡视频一区| 在线看国产一区二区| 欧美一区日韩一区| 久久一夜天堂av一区二区三区| 日本一区二区三区在线观看| 亚洲人亚洲人成电影网站色| 亚洲午夜国产一区99re久久| 久久精品国产**网站演员| 国产盗摄精品一区二区三区在线 | 91在线观看免费视频| 欧美自拍偷拍一区| 欧美一区二区啪啪| 中文字幕在线播放不卡一区| 午夜在线成人av| 国产麻豆精品95视频| 91蝌蚪porny成人天涯| 欧美人与z0zoxxxx视频| 久久一区二区三区国产精品| 一区二区三区日韩欧美| 精品在线免费观看| 91精品福利在线| 久久日韩粉嫩一区二区三区| 一区二区不卡在线播放| 国产尤物一区二区| 欧美日韩你懂得| 中文字幕在线不卡国产视频| 免费成人小视频| 精品视频在线视频| 国产精品天美传媒| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲亚洲人成综合网络| 国产精品中文字幕一区二区三区| 日本久久一区二区三区| 国产日韩一级二级三级| 日韩国产欧美在线视频| 色婷婷综合久久久| 欧美国产激情一区二区三区蜜月| 三级影片在线观看欧美日韩一区二区| 成人免费黄色大片| 日韩三级视频在线看| 亚洲国产精品久久不卡毛片 | 日韩精品一区二区三区蜜臀| 亚洲精品中文在线| 91免费国产在线| 国产精品久久久久影院老司| 国产一区二区三区四区在线观看| 欧美日韩国产片| 亚洲国产精品久久艾草纯爱| 色综合中文综合网| 中文字幕av一区二区三区高| 免费观看日韩av| 欧美精品 国产精品| 亚洲国产日韩综合久久精品| 日本道在线观看一区二区| 中文字幕日韩av资源站| 成人福利视频网站| 国产精品毛片大码女人| 成人免费黄色大片| 1000部国产精品成人观看| 风间由美一区二区三区在线观看 | 91精品国产高清一区二区三区蜜臀| 亚洲裸体xxx| 日本精品视频一区二区三区| 亚洲精品亚洲人成人网在线播放| 91在线视频18| 樱花草国产18久久久久| 在线精品视频小说1| 亚洲欧洲日本在线| 欧洲一区在线观看| 天堂精品中文字幕在线| 日韩亚洲电影在线| 国产精品亚洲一区二区三区妖精 | 99久久精品情趣| 一区二区三区精品视频| 欧美日韩一区二区不卡| 日本va欧美va瓶| 日韩欧美一二三区| 成人午夜免费av| 一区二区三区在线看| 制服丝袜日韩国产| 国产黄色精品网站| 亚洲免费av网站| 日韩三级免费观看| www.欧美精品一二区| 亚洲午夜一区二区三区| 欧美成人精品3d动漫h| 成人性生交大片免费看视频在线| 亚洲精品国产成人久久av盗摄| 欧美精品一卡两卡| 国产凹凸在线观看一区二区| 亚洲欧美日韩一区| 欧美精品一区二区精品网| av一区二区三区在线| 日韩国产精品91| 国产精品看片你懂得| 337p亚洲精品色噜噜| 不卡欧美aaaaa| 肉色丝袜一区二区| 亚洲欧洲成人自拍| 欧美www视频| 欧美色国产精品| 成人av在线网| 国内精品国产成人国产三级粉色 | 亚洲va天堂va国产va久| 国产精品免费视频观看| 欧美变态口味重另类| 在线视频欧美精品| 丁香激情综合国产| 久久99精品久久久久久国产越南 | 欧美四级电影网| 成人av网站在线| 国产尤物一区二区在线| 日韩激情一二三区| 亚洲图片欧美色图| 亚洲精品日韩一| 国产精品久99| 久久久欧美精品sm网站| 欧美变态tickling挠脚心| 欧美日本精品一区二区三区| 99精品久久99久久久久| 粉嫩高潮美女一区二区三区| 久久99精品网久久| 裸体健美xxxx欧美裸体表演| 丝瓜av网站精品一区二区| 国产精品第五页| 国产精品视频免费看| 国产精品久久久久久久蜜臀| 国产欧美日韩亚州综合| 国产偷国产偷亚洲高清人白洁| 欧美成人女星排行榜| 日韩一级免费一区| 欧美xxxxx裸体时装秀| 日韩精品一区二区三区四区视频 | 国产精品亚洲一区二区三区妖精| 久久草av在线| 韩国精品免费视频| 国产一区二区三区最好精华液| 极品美女销魂一区二区三区免费 | 亚洲欧洲日韩av| 亚洲男人电影天堂| 亚洲综合视频在线观看| 日韩激情av在线| 激情偷乱视频一区二区三区| 国产一区二区视频在线| 丁香亚洲综合激情啪啪综合| 成人国产精品免费观看视频| 99国产精品视频免费观看| 欧美性大战xxxxx久久久| 欧美精品 国产精品| 久久久久国产精品麻豆ai换脸| 中文字幕av在线一区二区三区| 亚洲人成网站精品片在线观看| 一区二区三区在线视频免费| 免费看日韩a级影片| 国产福利91精品一区二区三区| fc2成人免费人成在线观看播放| 色综合天天综合狠狠| 欧美日韩一区精品| 久久嫩草精品久久久精品一| 中文字幕在线观看一区| 午夜精品123| 国产一区二区三区四区五区美女| 91在线国内视频| 欧美精品三级日韩久久| 久久婷婷国产综合精品青草| 亚洲卡通动漫在线| 蜜桃一区二区三区四区| 99久久99精品久久久久久| 这里只有精品99re| 日韩一区日韩二区| 久久国产尿小便嘘嘘| 91免费在线播放| 国产亚洲精品aa午夜观看| 亚洲黄网站在线观看| 国内成人精品2018免费看| 国产主播一区二区| 国产精品成人在线观看| 26uuu国产一区二区三区| 1024亚洲合集| 国产精品影视天天线| 欧美日韩国产区一| 日本强好片久久久久久aaa|