亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美变态口味重另类| 中文字幕一区免费在线观看| 欧美精品一区二区三区很污很色的| 久久欧美中文字幕| 亚洲小说欧美激情另类| 成人一区二区三区在线观看| 欧美男女性生活在线直播观看| 久久久久久免费网| 日本亚洲三级在线| 欧美午夜免费电影| 日韩一区欧美小说| 国产精品123| 精品少妇一区二区三区免费观看 | 日韩欧美在线网站| 一区二区成人在线| 欧美伊人精品成人久久综合97| 精品精品国产高清一毛片一天堂| 亚洲第一精品在线| 日本韩国视频一区二区| 国产精品视频在线看| 国产在线播放一区三区四| 7777精品伊人久久久大香线蕉完整版 | 亚洲一区二区不卡免费| 波波电影院一区二区三区| 久久久精品人体av艺术| 国内久久精品视频| 日韩一区二区电影网| 日韩电影一区二区三区四区| 欧美天天综合网| 亚洲午夜免费视频| 欧美私模裸体表演在线观看| 亚洲精品国产高清久久伦理二区| 91在线精品一区二区| 综合久久久久久| 日本道色综合久久| 亚洲电影你懂得| 欧美精品免费视频| 免费不卡在线观看| 亚洲精品一区二区三区在线观看| 美女任你摸久久| 精品福利在线导航| 成人精品在线视频观看| 国产精品国产精品国产专区不片| 不卡视频免费播放| 一区二区三区在线免费| 欧美日韩一区二区在线观看| 日本亚洲视频在线| 国产清纯在线一区二区www| 成人小视频免费在线观看| 中文成人av在线| 色婷婷综合中文久久一本| 亚洲一区免费在线观看| 欧美一区二区精品在线| 精品亚洲成av人在线观看| 久久久久九九视频| 91在线精品一区二区| 亚洲第一主播视频| 久久久久久久综合色一本| 成人av免费在线观看| 亚洲在线视频一区| 精品成人一区二区三区四区| 成人av网址在线| 天天影视涩香欲综合网 | 国产精品国产三级国产aⅴ原创| 91丨porny丨最新| 日韩电影免费在线| 国产精品免费av| 在线综合亚洲欧美在线视频| 国产精品一二三| 亚洲123区在线观看| 久久亚洲综合色| 欧美日韩一区国产| 国产一区二区精品久久| 亚洲国产中文字幕在线视频综合| 欧美一级高清大全免费观看| 国产91在线|亚洲| 免费成人小视频| 日韩美女精品在线| 精品国产一区久久| 在线观看视频一区二区欧美日韩| 精品一区二区三区久久| 亚洲精品视频在线| 日本一区二区三区电影| 欧美久久免费观看| 97精品国产97久久久久久久久久久久| 天使萌一区二区三区免费观看| 国产视频一区不卡| 91精品国产麻豆| 欧美影院午夜播放| jlzzjlzz亚洲日本少妇| 国内外成人在线| 亚洲电影视频在线| 樱花草国产18久久久久| 国产欧美日韩卡一| 日韩精品中文字幕一区二区三区| 色老汉一区二区三区| 成人国产一区二区三区精品| 久久99精品国产麻豆不卡| 图片区小说区国产精品视频| 中文字幕一区二区三区在线不卡| 久久这里只有精品视频网| 欧美一级高清片在线观看| 欧美影院一区二区| 欧美中文字幕一二三区视频| 97久久超碰精品国产| 东方aⅴ免费观看久久av| 狠狠色丁香九九婷婷综合五月| 婷婷综合另类小说色区| 亚洲欧美综合色| 欧美日韩国产小视频| 欧美精品一卡二卡| 色哟哟一区二区三区| 成人激情图片网| 国产在线不卡一区| 九一久久久久久| 精品一区二区三区的国产在线播放| 亚洲成人资源网| 日韩激情视频在线观看| 日韩福利视频网| 精品中文字幕一区二区小辣椒| 蜜桃精品视频在线| 国产一区二区三区在线观看免费视频| 久久激情综合网| 精品一区二区三区在线观看国产 | 中文成人av在线| 中文天堂在线一区| 综合激情成人伊人| 亚洲国产精品久久久久秋霞影院| 亚洲国产精品久久人人爱| 日韩和欧美一区二区| 日本三级亚洲精品| 久久超碰97人人做人人爱| 国产精品一二三| 91麻豆国产自产在线观看| 欧美丝袜自拍制服另类| 777奇米四色成人影色区| 欧美mv和日韩mv的网站| 国产亚洲一区二区三区四区| 国产欧美一区二区精品忘忧草| 中文字幕在线不卡一区| 亚洲3atv精品一区二区三区| 久久www免费人成看片高清| 成人免费视频播放| 欧美日韩亚洲综合| 精品成人一区二区三区| 中文字幕一区二区三区视频| 亚洲综合丁香婷婷六月香| 免费人成精品欧美精品| 国产成人av一区| 欧美色涩在线第一页| 欧美成人性福生活免费看| 亚洲色图第一区| 另类小说视频一区二区| 色综合天天性综合| 日韩免费视频一区二区| 亚洲视频在线观看一区| 麻豆精品国产传媒mv男同 | 精品视频在线视频| 久久久激情视频| 亚洲成人午夜影院| 国产在线不卡一区| 欧美色视频一区| 中文字幕二三区不卡| 美国毛片一区二区| 欧美亚洲一区三区| 国产精品白丝在线| 国产精品亚洲综合一区在线观看| 欧美色图激情小说| 国产精品乱人伦中文| 免费观看成人av| 欧美视频在线一区二区三区| 国产亚洲视频系列| 久久成人免费电影| 4438x成人网最大色成网站| 最近日韩中文字幕| 成人免费高清在线| 久久蜜臀精品av| 日本亚洲三级在线| 欧美人妇做爰xxxⅹ性高电影 | 欧美mv日韩mv亚洲| 五月天精品一区二区三区| 日本韩国欧美在线| 亚洲欧美综合另类在线卡通| 国产精品自拍一区| 欧美草草影院在线视频| 天天综合色天天综合色h| 在线观看区一区二| 中文字幕视频一区二区三区久| 国产精品911| 久久久久成人黄色影片| 日韩福利视频网| 欧美一区二区精美| 麻豆一区二区三区| 日韩欧美成人一区二区| 日本午夜精品视频在线观看| 欧美在线观看18| 天天av天天翘天天综合网色鬼国产| 欧美色图一区二区三区| 亚洲123区在线观看| 欧美顶级少妇做爰|