青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

專職C++

不能停止的腳步

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用鏈接

留言簿(28)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

本文地址:http://m.shnenglu.com/zdhsoft/archive/2014/08/04/207906.html
今天,有空翻了一下<C++Primer plus(第六版)>,看到里面有介紹新的for循環和初始化列表,但是我實現的動態數組XDynamicArray不支持這些新特性,沒辦法,只好進行改造了。
首先是for循環,如下面的樣式
for(auto e:stList)
{
    cout<<e<<endl;
}
是于就各種google,和查找C++11的array的源代碼,總結:就是提供一個標準的iterator和begin,end這兩個方法,就可以了。
是于定義了一個iterator
    //一個數組的Array的Iterator類
    /*
        這里提供XArrayIterator這個類,目的是使得這里支持C++11的for循環
    
*/
    template<class Array>
    class XArrayIterator
    {
    public:
        typedef typename Array::ElementType & reference;
        typedef typename Array::ElementType * pointer;


        XArrayIterator()
            :m_Index(ARRAY_INVALID_INDEX), m_Array(nullptr)
        {}

        XArrayIterator(Array * paramArray, XInt paramIndex)
            :m_Index(paramIndex), m_Array(paramArray)
        {}

        XArrayIterator(Array & paramArray, XInt paramIndex)
            :m_Index(paramIndex), m_Array(&paramArray)
        {}

        XArrayIterator(const XArrayIterator<Array> & paramR)
            :m_Index(paramR.m_Index), m_Array(paramR.m_Array)
        {}

        XArrayIterator & operator = (const XArrayIterator<Array> & paramR)
        {
            if (this != &paramR)
            {
                m_Index = paramR.m_Index;
                m_Array = paramR.m_Array;
            }
            return *this;
        }

        XArrayIterator & operator = (Array * paramArray)
        {
            m_Array = paramArray;
            if (isNotNULL(m_Array))
            {
                m_Array = m_Array->getFirstIndex();
            }
            else
            {
                m_Index = ARRAY_INVALID_INDEX;
            }
            return *this;
        }

        bool operator == (const XArrayIterator<Array> & paramR)
        {
            return m_Index == paramR.m_Index && m_Array == paramR.m_Array;
        }

        bool operator != (const XArrayIterator<Array> & paramR)
        {
            return m_Index != paramR.m_Index || m_Array != paramR.m_Array;
        }
        
        reference operator*()
        {    
            return (*m_Array)[m_Index];
        }
        
        const reference operator*() const 
        {    
            return (*m_Array)[m_Index];
        }

        pointer operator->()
        {    
            return &(*m_Array[m_Index]);
        }

        const pointer operator->() const
        {    
            return &(*m_Array[m_Index]);
        }

        XArrayIterator & operator ++()
        {
            if (m_Index != ARRAY_INVALID_INDEX && isNotNULL(m_Array))
            {
                m_Index++;
                if (m_Index >= m_Array->getLength()) m_Index = ARRAY_INVALID_INDEX;
            }
            return *this;
        }


        XArrayIterator operator ++(int)
        {
            XArrayIterator stRet = *this;
            if (m_Index != ARRAY_INVALID_INDEX && isNotNULL(m_Array))
            {
                m_Index++;
                if (m_Index >= m_Array->getLength()) m_Index = ARRAY_INVALID_INDEX;
            }
            return stRet;
        }

        XArrayIterator & operator --()
        {
            if (m_Index != ARRAY_INVALID_INDEX && isNotNULL(m_Array))
            {
                m_Index--;
                if (m_Index < 0) m_Index = ARRAY_INVALID_INDEX;
            }
            return *this;
        }


        XArrayIterator operator --(int)
        {
            XArrayIterator stRet = *this;
            if (m_Index != ARRAY_INVALID_INDEX && isNotNULL(m_Array))
            {
                m_Index--;
                if (m_Index < 0) m_Index = ARRAY_INVALID_INDEX;
            }
            return stRet;
        }

        XArrayIterator & operator +=(XInt paramOffset)
        {
            if (m_Index != ARRAY_INVALID_INDEX && isNotNULL(m_Array))
            {
                m_Index += paramOffset;
                if (!(m_Index >= 0 && m_Index < m_Array->getLength()))
                {
                    m_Index = ARRAY_INVALID_INDEX;
                }
            }
            return *this;
        }

        XArrayIterator operator + (XInt paramOffset) const
        {
            XArrayIterator stRet = *this;
            stRet += paramOffset;
            return stRet;
        }

        XArrayIterator & operator -=(XInt paramOffset)
        {
            return operator += (-paramOffset);
        }

        XArrayIterator operator - (XInt paramOffset) const
        {
            XArrayIterator stRet = *this;
            stRet -= paramOffset;
            return stRet;
        }
    private:
        XInt m_Index;
        Array * m_Array;
    };
然后在XDynamicArray兩個方法
typedef XArrayIterator<XDynamicArray<T> > iterator
        /*這里定義begin和end主要有兩個目的
            目的1:使它可以像標準STD容器那樣遍歷
            目的2:使它可以支持C++11的for循環
            例子:
            XDynamicArray<int> st;
            for(auto x:st)
            {
                cout<<x<<endl;
            }
        
*/
        iterator begin() 
        {
            iterator stRet(thisthis->getFirstIndex());
            return stRet;
        }

        iterator end() 
        {
            iterator stRet(this, ARRAY_INVALID_INDEX);
            return stRet;
        }
這樣就可以了,測試通過。你們也可以試試。
C++11的另一個特性,就是新初始化列表,如下面例子
vector st {1,2,3,4,5};
看起來有點意思,于是又google一下,翻閱了各位大神的貼子,最終找到,然后我就實現了。這部分需要使用C++11的initializer_list模板類,具體使用代碼如下。
        //這個構造函數的定義,是為了實現C++11的初始化列表,如下例子
        /*
            XDynamicArray<int> st {1,2,3,4,5};
            或 XDynamicArray<int> st = {1,2,3,4,5};
        
*/
        XDynamicArray(std::initializer_list<T> paramList)
            : m_Length(0),
             m_Capacity(0),
             m_Data(NULL)
        {
            this->ensureCapacity((XInt)paramList.size());
            for (auto e : paramList)
            {
                Append(e);
            }
        }
使用initializer_list需要頭文件:#include <initializer_list>
上述代碼,已經放到我的開放庫中了,大家可以自行下載。我的開放代碼
posted on 2014-08-04 18:47 冬瓜 閱讀(1638) 評論(0)  編輯 收藏 引用 所屬分類: 原創
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            夜夜精品视频一区二区| 亚洲一区二区三区四区中文| 欧美理论片在线观看| 麻豆精品国产91久久久久久| 久久综合九九| 欧美成人a∨高清免费观看| 老色鬼久久亚洲一区二区| 免费久久精品视频| 欧美成人中文| 国产精品国产三级国产普通话三级 | 国产精品99久久久久久久久久久久| av成人动漫| 香蕉亚洲视频| 美女视频黄免费的久久| 欧美日韩一区二区视频在线| 国产精品视频网站| 亚洲国产成人午夜在线一区| 一本色道婷婷久久欧美| 欧美一区免费视频| 欧美mv日韩mv国产网站| 亚洲美女福利视频网站| 欧美在线播放一区| 欧美大片免费观看在线观看网站推荐| 欧美午夜精品电影| 在线播放亚洲| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 免费亚洲电影| 一区二区三区四区精品| 欧美自拍偷拍午夜视频| 欧美日韩视频一区二区三区| 激情国产一区| 亚洲免费一在线| 免费av成人在线| 亚洲一区在线看| 欧美激情精品久久久久久蜜臀 | 欧美日韩一区二区三区在线看 | 亚洲欧美另类久久久精品2019| 欧美一区二区国产| 欧美激情亚洲激情| 午夜国产欧美理论在线播放| 欧美精品粉嫩高潮一区二区 | 久热精品在线视频| 国产欧美三级| 亚洲欧美国产精品va在线观看| 欧美激情五月| 老司机一区二区三区| 国产香蕉久久精品综合网| 亚洲小视频在线观看| 亚洲黄色免费电影| 久久亚洲视频| 一区二区自拍| 美女91精品| 久久精品亚洲热| 国产一区二区精品在线观看| 先锋影音国产一区| 亚洲午夜av在线| 国产精品久久久久久久久久久久久久 | 亚洲国产欧美一区二区三区同亚洲 | 欧美午夜不卡| 亚洲视频免费观看| 91久久嫩草影院一区二区| 欧美成人小视频| 亚洲国产婷婷香蕉久久久久久99| 久久视频免费观看| 久久九九热re6这里有精品| 国产一区在线播放| 久久午夜精品一区二区| 久久久青草婷婷精品综合日韩| 国内自拍亚洲| 欧美成人四级电影| 欧美日韩精品一区二区在线播放| 一本色道久久综合亚洲二区三区| 亚洲欧洲日本在线| 国产精品大片wwwwww| 午夜精品婷婷| 久久久久免费观看| 亚洲人成网在线播放| 日韩视频在线一区二区| 国产精品爽爽ⅴa在线观看| 久久久夜夜夜| 欧美日韩成人在线| 欧美中文字幕视频| 久久久久久久久伊人| 亚洲精品影视| 亚洲一区在线观看视频| 国产精品一区二区三区免费观看 | 免费在线观看精品| 美女日韩在线中文字幕| 亚洲视频一二| 久久丁香综合五月国产三级网站| 一区在线播放| 日韩视频不卡| 国产亚洲综合在线| 最新亚洲一区| 国产主播一区二区三区| 91久久中文| 国产一区二区中文| 亚洲日本一区二区| 国内精品写真在线观看| 99热免费精品| 尤物精品在线| 亚洲一区精品在线| 亚洲免费av观看| 久久精品色图| 午夜一区二区三区在线观看 | 国产综合自拍| 一本大道av伊人久久综合| 伊人色综合久久天天| 亚洲最新在线视频| 1000部精品久久久久久久久| 夜夜夜久久久| 亚洲人久久久| 久久精品道一区二区三区| 亚洲一区二区动漫| 免费短视频成人日韩| 欧美在线视频在线播放完整版免费观看| 欧美1区2区| 久久一区亚洲| 国产一区二区三区丝袜| 亚洲无人区一区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美日本簧片| 亚洲高清不卡在线观看| 国产真实精品久久二三区| 亚洲一区二区免费视频| 在线亚洲精品| 欧美激情自拍| 亚洲激情精品| 亚洲精品婷婷| 欧美插天视频在线播放| 欧美电影在线观看完整版| 尤物yw午夜国产精品视频明星| 欧美一区精品| 久久久久久电影| 国产一级一区二区| 午夜一区二区三区在线观看| 亚洲欧美精品在线观看| 国产精品一区二区久激情瑜伽| 99国产成+人+综合+亚洲欧美| 日韩亚洲不卡在线| 欧美剧在线观看| 亚洲精品日产精品乱码不卡| 亚洲理论在线观看| 欧美日韩成人综合天天影院| 国产精品视频一区二区三区 | 亚洲欧美久久久久一区二区三区| 鲁大师影院一区二区三区| 久久亚洲一区二区| 国产一区二区精品久久91| 欧美一区二区三区四区视频| 久久精品视频99| 在线观看一区二区精品视频| 久久综合给合| 亚洲黄色免费网站| 中国成人在线视频| 国产日韩一区二区三区在线播放 | 欧美一区二区三区免费大片| 久久久蜜桃一区二区人| 在线日韩欧美视频| 欧美日本韩国一区| 亚洲网站在线| 久久夜色撩人精品| 亚洲欧洲日本一区二区三区| 欧美精品大片| 亚洲欧美日韩精品在线| 久久免费少妇高潮久久精品99| 亚洲国产日韩美| 国产精品福利在线| 久久久99爱| 99国产精品久久久久久久成人热| 久久成年人视频| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲小说春色综合另类电影| 国产精品综合视频| 久久午夜影视| 亚洲一级在线观看| 亚洲第一搞黄网站| 性色av一区二区三区| 亚洲欧洲一区二区三区久久| 欧美先锋影音| 另类av导航| 欧美有码在线观看视频| 亚洲精品九九| 欧美成人免费播放| 欧美亚洲午夜视频在线观看| 亚洲激情视频在线播放| 国产女主播一区| 欧美精品91| 久久免费视频在线| 亚洲欧美视频| 一区二区三区国产在线| 欧美激情一区二区三区在线视频观看 | 久久久精品日韩欧美| 99re66热这里只有精品3直播| 老鸭窝91久久精品色噜噜导演| 中文日韩在线| 亚洲精品欧美极品| 136国产福利精品导航| 国产日韩欧美a| 国产精品国产三级国产普通话蜜臀|