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

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

?? xarray.h

?? BCB的學習資料
?? H
?? 第 1 頁 / 共 3 頁
字號:
//---------------------------------------------------------------------------

#ifndef XArrayH
#define XArrayH
#ifndef XExcepMsgH
#include <XExcepMsg.h>
#endif
namespace zdhsoft
{
//前置申明兩個模板;
template<class T>class XArray;
template<class T>class XDynamicArray;
class XExceptionArrayOutOfRange;
//---------------------------------------------------------------------------
/*
///////////////////////////////////////////////////////////////////////////////
[Name]XArray<T>
[Title]靜態數組模板
///////////////////////////////////////////////////////////////////////////////
[Description]
    這是一個靜態數組類的模板,提供數組的基本功能。最主要的做用就是進行上下標檢查。
并些避免顯示的使用指針。對于內存的分配,采用的是缺省的new和delete方法
    所有方法已全部的測試
    關于const T & operator[](int Index)const;方法說明,由于一些模板,傳的參數是const
    類型的,結果造成T & operator[](int Index)編譯的時候提示錯誤,所以在這里又定了一個
    標識為const的operator[]方法。
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
[Test]
    2005-6-6 完成對XArray所有方法的測試
    除CodeGurad的指針算數越界之外,沒有其它任何提示
    在模塊定義中,指針只是計算出界,但并沒有訪問指向出界的數據
    
///////////////////////////////////////////////////////////////////////////////
*/
template<class T>
class XArray
{
public:
    XArray(int InitLength = 0);          //default constructor
    XArray(const XArray<T> & srcArray);    //default copy constructor
    XArray(const XDynamicArray<T> &srcArray); //以動態數為單位
    XArray(const T * srcData, int srcCount);  //動數據為單位
    ~XArray();

    T & operator[](int Index);
    const T & operator[](int Index) const;
    //assert
    XArray<T> & operator=(const XArray<T> & aOtherArray);
    const T * Data() const { return m_Data; }
    int GetLength()  const { return m_Length; }   

    void NewArray(const XArray<T> & srcArray,int srcIndex,int copySize); //根據指定的數組,調整自身這個數組
    static void CopyArray(const XArray<T> & srcArray,int srcIndex, XArray<T> & destArray, int destIndex, int copySize);//復制數組,從src復制到dest,

public:
    __property int Length = { read = m_Length };  //在BCB中,可以使用該性,在C++中最好不要使用。

private:
    T * m_Data;     //數組的指鐘
    int m_Length;   //數組的長度
};

/*
///////////////////////////////////////////////////////////////////////////////
[Name]XDynamicArray<T>
[Title]動態數組模板
///////////////////////////////////////////////////////////////////////////////
[Description]

    這是一個動態數組模板,提供動態數組功能。主要有Insert,Delete,Append,Clear等操
作,同時又具有靜態數組的功能。是靜態數組的一個擴展.
    該數組是基于靜態數組之上的
    2005-6-14新增PushBack,PopBack,<<,>>等方法
[Version]1.0
[Author]Rex Winter
[Date]2005-4-22
[Test]
    2005-6-14所有的方法均經過測試,
    除CodeGurad的指針算數越界之外,沒有其它任何提示
    在模塊定義中,指針只是計算出界,但并沒有訪問指向出界的數據
///////////////////////////////////////////////////////////////////////////////
*/
template<class T>
class XDynamicArray
{
public:
    XDynamicArray(int InitLength = 0,int iPrepareLength = 0);
    XDynamicArray(const XDynamicArray<T> & srcArray);
    XDynamicArray(const XArray<T> &srcArray,int iPrepareLength = 0);
    XDynamicArray(const T * data,int InitLength,int iPrepareLength = 0);
    ~XDynamicArray();
    static void CopyArray(const XDynamicArray<T> & srcArray,int srcIndex, XDynamicArray<T> & destArray, int destIndex, int copySize);

    const T * Data() const { return m_Data->Data(); }
    int  GetLength() const { return m_Length; }
    //確認最小容量
    void ensureCapacity(int minimumCapacity)
    {
        if (minimumCapacity > m_Data->GetLength() )
        {
            expandCapacity(minimumCapacity);
        }
    }
    //清除所有數組
    void Clear(bool bFree = false)
    {
        if(bFree)
        {
            delete m_Data;
            m_Data = new XArray<T>(16);
        }
        m_Length = 0;
    }
    //get array element function
    const T & operator[](int Index) const;
    T & operator[](int Index);
    //assert
    XDynamicArray<T> & operator=(const XDynamicArray<T> & aOtherArray);
    void Append(const T & data);

    void Append(const XArray<T> &dataArray);
    void Append(const XDynamicArray<T> & dataArray);
    void Append(const T * aData,int AppendCount);
    //在最后追加一個元素
    XDynamicArray<T> & operator<<(const T & data)
    {
        Append(data);
        return *this;
    }
    //在最后追加一組元素
    XDynamicArray<T> & operator<<(const XArray<T> &dataArray)
    {
        Append(dataArray);
        return *this;
    }
    //在最后追加一組元素
    XDynamicArray<T> & operator<<(const XDynamicArray<T> & dataArray)
    {
        Append(dataArray);
        return *this;
    }
    //在最后彈出一個元素
    XDynamicArray<T> & operator>>(T & data)
    {
        PopBack(data);
        return *this;
    }
    void PushBack(const T & data);
    bool PopBack();
    bool PopBack(T & data);
    bool IsEmpty() { return m_Length<1?true:false; }
    XDynamicArray<T> & Delete(int Index);
    XDynamicArray<T> & DeleteRange(int BeginIndex,int DeleteCount);
    XDynamicArray<T> & Insert(int Index,const T & data);
    void NewArray(const XDynamicArray<T> & srcArray,int sIndex, int copySize);
    void NewArray(const XArray<T> & srcArray,int sIndex, int copySize);
public: //屬性
    __property int Length = { read = m_Length };
private:
    void expandCapacity(int minimumCapacity);
private:
    XArray<T> * m_Data;
    int m_Length;
};
//實現
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XArray
[Title]XArray的構造函數。
////////////////////////////////////////////////////////////////////////////////
[param]
    <int default=0>InitLength    數組初始化時的大小
[Exception]
    EOutOfMemory  如果new出內存失敗,則拋出EOutOfMemory異常
[Description]
    XArray的構造函數。
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XArray<T>::XArray(int InitLength)
    :m_Data(NULL),m_Length(0)
{
    if( InitLength < 0 ) InitLength = 0;
    if( InitLength > 0 )
    {
        m_Data = new T[ InitLength ];
        if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
        else m_Length = InitLength;
    }
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XArray
[Title]XArray的拷貝構造函數。
////////////////////////////////////////////////////////////////////////////////
[param]
    <const XArray<T> &>srcArray    目標數組
[Exception]
    EOutOfMemory  如果new出內存失敗,則拋出EOutOfMemory異常
[Description]
    XArray的構造函數。為了避免編譯器產生一個這樣的構造函數
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XArray<T>::XArray(const XArray<T> & srcArray)
    :m_Data(NULL),m_Length( srcArray.m_Length )
{
    int iLength = srcArray.m_Length;
    if( iLength > 0 )
    {
        m_Data = new T[ iLength ];
        if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
        m_Length = iLength;
        //copy Data
        const T * src = srcArray.Data();
        T * dest = m_Data;
        for(int Index = 0; Index < iLength; Index ++)
        {
            *dest = *src;
            dest++;
            src++;
        }
    }
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XArray
[Title]XArray的構造函數。
////////////////////////////////////////////////////////////////////////////////
[param]
    <const XDynamicArray<T> &>srcArray    目標動態數組
[Exception]
    EOutOfMemory  如果new出內存失敗,則拋出EOutOfMemory異常
[Description]
    根據動態數組初始數組
[Version]1.0
[Author]Rex Winter
[Date]2005-4-26
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XArray<T>::XArray(const XDynamicArray<T> & srcArray)
    :m_Data(NULL),m_Length( 0 )
{
    int InitLength = srcArray.GetLength();
    if( InitLength > 0 )
    {
        m_Data = new T[ InitLength ];
        if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
        m_Length = InitLength;
        //copy Data;
        const T * src = srcArray.Data();
        T * dest = m_Data;
        for(int Index = 0; Index < InitLength; Index ++ )
        {
            *dest = *src;
            dest++;
            src++;
        }
    }
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]XArray
[Title]XArray的構造函數。
////////////////////////////////////////////////////////////////////////////////
[param]
    <const T *>srcData 將要初始化的數據
    <int>InitLength    初始化數據的個數
[Exception]
    EOutOfMemory  如果new出內存失敗,則拋出EOutOfMemory異常
[Description]
    根據指定的數據,初始化數據
[Version]1.0
[Author]Rex Winter
[Date]2005-4-26
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XArray<T>::XArray(const T * srcData, int InitLength)
    :m_Data(NULL),m_Length( 0 )
{
    if( InitLength > 0 )
    {
        m_Data = new T[ InitLength ];
        if( m_Data == NULL ) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
        m_Length = InitLength;
        const T * src = srcData;
        T * dest = m_Data;
        for(int Index = 0; Index < InitLength; Index ++ )
        {
            *dest = * src;
            dest++;
            src++;
        }
    }
}

/*
////////////////////////////////////////////////////////////////////////////////
[Name]operator []
[Title]取得數組元素。
////////////////////////////////////////////////////////////////////////////////
[param]
    <int>Index    對應的數組的下標
[Return]
    <T&>返回數組元素的引用。
[Exception]
    XExceptionArrayOutOfRange  如果下標越界,則拋出XExceptionArrayOutOfRange異常
[Description]
    取得數組元素,并返回這個元素的引用。
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
T& XArray<T>::operator[](int Index)
{
    if( Index<0 || Index >= m_Length ) throw XExceptionArrayOutOfRange(Index, m_Length);
    return m_Data[Index];
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]operator []
[Title]取得數組元素。但反回的值是不可變的
////////////////////////////////////////////////////////////////////////////////
[param]
    <int>Index    對應的數組的下標
[Return]
    <const T&>返回數組元素的引用。
[Exception]
    XExceptionArrayOutOfRange  如果下標越界,則拋出XExceptionArrayOutOfRange異常
[Description]
    取得數組元素,并返回這個元素的引用。
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
const T& XArray<T>::operator[](int Index) const
{
    if( Index<0 || Index >= m_Length ) throw XExceptionArrayOutOfRange(Index, m_Length);
    return m_Data[Index];
}
/*
////////////////////////////////////////////////////////////////////////////////
[Name]operator =
[Title]重設數組,使其與目的數組一樣。
////////////////////////////////////////////////////////////////////////////////
[param]
    <const XArray<T> &>aOtherArray    目的數組對象
[Return]
    <XArray<T> &>返回當前對象的引用。
[Exception]
    EOutOfMemory  如果內存失敗,則拋出OutOfMemory異常
[Description]
    給數組賦新值,如果數據源為自已,則不進行重新復制
    如果重新申請內存失敗,則拋出異常,拋出異常EOutOfMemory
    如果數據源的大小<=Length(),則不進行重新申請內存
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XArray<T> & XArray<T>::operator = (const XArray<T> & aOtherArray)
{
    if( this == &aOtherArray) return *this; //如果數據源就是本身,則不進行重新復制
    if( m_Length < aOtherArray.m_Length )
    {
        if(m_Data != NULL) delete[] m_Data;
        m_Data = new T[aOtherArray.m_Length];
        if(m_Data == NULL) throw EOutOfMemory(EXCEPTION_OUT_OF_MEMORY);
    }
    //copy data
    m_Length = aOtherArray.m_Length;
    const T * src = aOtherArray.m_Data;
    T * dest = m_Data;
    for(int iCount=0; iCount<m_Length; iCount++)
    {
        *dest = *src;
        dest++;
        src++;
    }
    return * this;
}

/*
////////////////////////////////////////////////////////////////////////////////
[Name]~XArray
[Title]XArray的析構函數。
////////////////////////////////////////////////////////////////////////////////
[Description]
    XArray的析構函數。
    釋放申請的內存,并將數組長度設為0
[Version]1.0
[Author]Rex Winter
[Date]2005-4-21
////////////////////////////////////////////////////////////////////////////////
*/
template<class T>
XArray<T>::~XArray()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久国产精品麻豆| 亚洲综合精品自拍| 亚洲一区二区在线免费观看视频| 亚洲成av人片在线| av成人动漫在线观看| 精品理论电影在线观看 | 色婷婷精品久久二区二区蜜臂av| 欧美高清www午色夜在线视频| 欧美精品一区二| 精品剧情v国产在线观看在线| 综合在线观看色| 国产酒店精品激情| 91精品国产综合久久久蜜臀图片| 亚洲日本免费电影| 国产老妇另类xxxxx| 日韩一区二区免费高清| 亚洲成人免费影院| 欧美性受xxxx黑人xyx| 亚洲人成人一区二区在线观看| 国产成人av一区二区| 欧美另类久久久品| 亚洲第一成年网| 日本高清不卡在线观看| 亚洲视频狠狠干| 99视频精品在线| 久久久久国色av免费看影院| 奇米888四色在线精品| 色综合久久久久久久久| 亚洲日本在线看| 一本色道a无线码一区v| 亚洲色欲色欲www| 一本大道久久a久久精二百| 亚洲欧美综合网| 91亚洲男人天堂| 亚洲黄色性网站| 欧美日韩高清在线| 美女视频免费一区| 欧美v国产在线一区二区三区| 免费在线一区观看| 久久中文娱乐网| 成人激情免费视频| 樱花影视一区二区| 欧美精品tushy高清| 裸体歌舞表演一区二区| 337p日本欧洲亚洲大胆精品| 国产九九视频一区二区三区| 中文在线免费一区三区高中清不卡| 国产aⅴ综合色| 中文字幕日韩欧美一区二区三区| 91蜜桃网址入口| 亚洲午夜一区二区三区| 日韩欧美在线123| 国产高清精品网站| 亚洲人成网站色在线观看 | 成人午夜在线免费| 亚洲女女做受ⅹxx高潮| 欧美精品日韩综合在线| 精品一区二区av| 国产精品久久免费看| 欧美体内she精高潮| 午夜久久福利影院| 久久青草国产手机看片福利盒子 | 欧美在线观看一区| 久久99精品久久久久久国产越南 | 成人午夜av影视| 亚洲一卡二卡三卡四卡五卡| 欧美大片一区二区三区| 91在线高清观看| 日本中文在线一区| 国产精品久久免费看| 欧美乱妇15p| 成人av免费在线| 日韩精品午夜视频| 国产精品看片你懂得| 69成人精品免费视频| 不卡影院免费观看| 看片网站欧美日韩| 亚洲一区二区精品3399| 国产网站一区二区| 欧美日韩成人在线| 97久久超碰精品国产| 久久99精品久久久久久| 亚洲午夜精品在线| 中文在线资源观看网站视频免费不卡| 欧美日韩mp4| 91原创在线视频| 久久精品国产99国产| 亚洲永久精品大片| 国产精品久久久久影院色老大| 欧美区在线观看| 在线视频一区二区免费| 国产精品99精品久久免费| 日韩二区三区四区| 亚洲国产视频一区| 中文字幕一区二区三| 欧美极品aⅴ影院| 欧美va亚洲va| 日韩欧美一级二级| 欧美日产国产精品| 欧美性色黄大片| 91论坛在线播放| gogogo免费视频观看亚洲一| 狠狠色狠狠色合久久伊人| 免费欧美在线视频| 免费观看在线综合| 六月婷婷色综合| 日本aⅴ亚洲精品中文乱码| 亚洲成人av一区二区| 亚洲综合一区二区三区| 亚洲综合久久久| 亚洲愉拍自拍另类高清精品| 亚洲一线二线三线视频| 亚洲综合在线视频| 亚洲午夜免费电影| 亚洲成人动漫在线免费观看| 亚洲二区在线视频| 日韩一区精品视频| 蜜臀久久久99精品久久久久久| 青草av.久久免费一区| 天使萌一区二区三区免费观看| 婷婷丁香激情综合| 蜜桃免费网站一区二区三区| 青娱乐精品在线视频| 亚洲成人综合在线| 日本不卡在线视频| 精品一区二区三区蜜桃| 国产99久久久精品| 91啪亚洲精品| 欧美另类高清zo欧美| 欧美精品一区二区三区在线播放| 久久久久久免费毛片精品| 国产精品久久久久一区二区三区| 亚洲欧美一区二区在线观看| 亚洲免费观看高清完整版在线 | 日韩久久久精品| 久久影院午夜论| 中文字幕中文字幕在线一区 | 中文字幕精品在线不卡| 亚洲美女在线一区| 奇米精品一区二区三区在线观看 | 色呦呦日韩精品| 欧美日本精品一区二区三区| 精品久久久久久最新网址| 国产精品久久久久久福利一牛影视 | 亚洲欧洲av一区二区三区久久| 亚洲免费在线视频一区 二区| 偷拍与自拍一区| 成人三级伦理片| 欧美日韩高清不卡| 欧美激情一区二区在线| 亚洲大片在线观看| 成人亚洲精品久久久久软件| 欧美日韩在线一区二区| 欧美国产日韩一二三区| 亚洲成人在线网站| 成人av网址在线观看| 日韩欧美区一区二| 一卡二卡三卡日韩欧美| 视频一区二区三区在线| 国产福利一区在线| 91麻豆精品久久久久蜜臀 | 欧美午夜电影一区| 中文字幕av一区二区三区免费看| 婷婷综合五月天| 91婷婷韩国欧美一区二区| 日韩欧美不卡一区| 一区二区三区产品免费精品久久75| 极品美女销魂一区二区三区| 欧美日韩在线播放| 亚洲欧洲精品一区二区精品久久久 | 麻豆91精品视频| 日本道色综合久久| 国产精品久久久久久妇女6080| 日韩电影在线观看电影| 在线一区二区三区四区五区| 中文欧美字幕免费| 国产一区二区美女| 日韩一区二区麻豆国产| 性做久久久久久免费观看 | 精品国产91亚洲一区二区三区婷婷| 一区二区三区四区五区视频在线观看 | 亚洲欧美偷拍卡通变态| 国产99久久久国产精品潘金| 欧美电影精品一区二区| 日韩av电影免费观看高清完整版| 欧美亚洲自拍偷拍| 亚洲欧美经典视频| 91啪亚洲精品| 亚洲三级在线看| 色综合一个色综合| 中文字幕在线视频一区| 风间由美一区二区三区在线观看| 亚洲精品一区二区三区99| 久久99国产精品尤物| 日韩精品最新网址| 视频精品一区二区| 欧美三级午夜理伦三级中视频| 亚洲精品一卡二卡| 欧美中文一区二区三区| 亚洲午夜电影在线|