• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Just enjoy programming

            一個(gè)簡單的空間配置器

                 以STL的運(yùn)用角度而言,空間配置器時(shí)最不需要介紹的東西,它總是隱藏在一切組件的背后,整個(gè)STL的操作對(duì)象(所有的數(shù)值)都存放在容器之內(nèi),而容器一定需要配置空間以置放資料。下面是一個(gè)簡單空間配置器代碼(來自 STL源碼剖析):
            //jjalloc.h
            #ifndef _JJALLOC_
            #define _JJALLOC_

            #include<new>
            #include<cstddef>
            #include<cstdlib>
            #include<climits>
            #include<iostream>

            using namespace std;

            namespace JJ
            {
            template<class T>
                inline T* _allocate(ptrdiff_t size,T*)
                {
                    set_new_handler(0);
                    T *tmp=(T*)(::operator new((size_t)(size* sizeof(T))));
                    if(tmp==0){
                        cerr<<"out of memory"<<endl;
                        exit(1);
                    }
                    return tmp;
                }

            template<class T>
                inline void _deallocate(T* buffer)
                {
                    ::operator delete(buffer);
                }

            template<class T1,class T2>
                inline void _construct(T1 *p,const T2& value)
                {
                    new(p)T1(value);//placement new operator
                }

            template<class T>
                inline void _destroy(T* ptr)
                {
                    ptr->~T();
                }

            template<class T>class allocator{
                public:
                    typedef    T    value_type;
                    typedef T*    pointer;
                    typedef const T*    const_pointer;
                    typedef T&    reference;
                    typedef const T&    const_reference;
                    typedef size_t    size_type;
                    typedef ptrdiff_t    difference_type;

                    template<class U>
                    struct rebind
                    {
                        typedef allocator<U>other;
                    };

                    pointer allocate(size_type n,const void * hint=0)
                    {
                        return _allocate((difference_type)n,(pointer)0);
                    }

                    void deallocate(pointer p,size_type n)
                    {
                        _deallocate(p);
                    }

                    void construct(pointer p,const T& value)
                    {
                        _construct(p,value);
                    }

                    void destroy(pointer p){_destroy(p);}

                    pointer address(reference x){return (pointer)&x;}

                    const_pointer const_address(const_reference x)
                    {
                        return (const_pointer)&x;
                    }

                    size_type max_size()const{
                        return size_type(UINT_MAX/sizeof(T));
                    }
            };
            }//end of namespace JJ

            #endif


            //jjalloc.cc,測試上面這個(gè)簡單的配置器
            #include"jjalloc.h"
            #include<vector>
            #include<iostream>

            using namespace std;

            int main()
            {
                int ia[5]={0,1,2,3,4};
                unsigned int i;

                vector<int,JJ::allocator<int> >iv(ia,ia+5);

                for(i=0;i<iv.size();i++)
                    cout<<iv[i]<<' ';
                cout<<endl;
            }



            posted on 2011-05-04 00:55 周強(qiáng) 閱讀(494) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c++ STL源碼分析

            精品永久久福利一区二区| 久久av高潮av无码av喷吹| 国产精品久久久久久久久久影院| 国内精品九九久久精品| 九九精品99久久久香蕉| 色偷偷91久久综合噜噜噜噜| 久久久无码精品亚洲日韩按摩 | 精品久久久无码21p发布| 久久精品人人槡人妻人人玩AV| 国产精品热久久毛片| 久久国产精品无码HDAV| 日日狠狠久久偷偷色综合0| 久久99热狠狠色精品一区| 久久久久青草线蕉综合超碰| 国产亚州精品女人久久久久久| 午夜精品久久久久久中宇| 色老头网站久久网| 久久精品无码一区二区app| 国产精品久久亚洲不卡动漫| 亚洲色婷婷综合久久| 99蜜桃臀久久久欧美精品网站 | 伊人久久大香线焦AV综合影院 | 久久精品国产亚洲AV无码娇色| 人人妻久久人人澡人人爽人人精品| 热re99久久精品国产99热| 久久久精品2019免费观看| 久久人人妻人人爽人人爽| 伊人久久大香线蕉AV色婷婷色 | 日本欧美国产精品第一页久久| 久久精品嫩草影院| 狠狠干狠狠久久| 久久91精品国产91久久小草 | 亚洲国产天堂久久综合网站| 久久99精品久久久久久久不卡 | 久久精品女人天堂AV麻| 香蕉久久夜色精品国产小说| 久久青草国产精品一区| 精品久久人人做人人爽综合| 久久影视国产亚洲| 三级三级久久三级久久| 久久久久免费看成人影片|