久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

MFC集合類簡介 - 含笑的日志 - 網(wǎng)易博客

 chensirDSP 2010-11-30

MFC集合類簡介

編程專欄 2010-08-22 00:34:37 閱讀24 評論0   字號: 訂閱

數(shù)組,,MFC數(shù)組類CArray
在頭文件Afxtempl.h中定義了CArray,它實際上是一個模板類,利用它
可以創(chuàng)建任何數(shù)據(jù)類型的類型安全數(shù)組.
非模板化數(shù)組類定義在Afxcoll.h中,有:CByteArray,CWordArray,CDwordArray...

相關(guān)函數(shù)
SetSize用來指定數(shù)組大小,,重載“[]”運算符調(diào)用數(shù)組的SetAt函數(shù)或GetAt函數(shù),,
InsertAt用以插入元素或一個數(shù)組,。
GetSize或GetUpperBound獲取數(shù)組元素個數(shù),。
刪除函數(shù):RemoveAt,,RemoveAll,,如果數(shù)組元素保存的是指向?qū)ο蟮闹羔槙r,
要首先清除對象再刪除數(shù)組元素以防止內(nèi)存泄露:
delete arr[i];
arr.RemoveAt(i);

動態(tài)調(diào)整數(shù)組大小
SetSize,,SetAtGrow,,Add

當(dāng)減小數(shù)組時,SetSize并不會自動縮小保存數(shù)組數(shù)據(jù)的緩沖區(qū),,需要調(diào)用
FreeExtra,,如:
array.SetSize(50);
array.SetSize(20);
array.FreeExtra();

同樣,對于RemoveAt和RemoveAll之后再調(diào)用FreeExtra可以縮小數(shù)組空間為剩下元素
需要的最新尺寸,。

用CArray創(chuàng)建類型安全數(shù)組類
聲明一個CPoint對象的類型安全數(shù)組:
CArray<CPoint,CPoint&>array;
第一個參數(shù)指定了數(shù)組中的數(shù)據(jù)類型,,第二個參數(shù)指定類型在參數(shù)列表中的表示方法。
另:非模板化數(shù)組類CUIntArray可以如下定義:
typedef CArray<UINT ,UINT> CUIntArray;

列表
可以將之前講述的數(shù)組看做是順序存儲的線性表,,這里的列表視為鏈表,,
這里的列表是雙向鏈表且不是循環(huán)的。

MFC列表類
非模板化列表類有:CObList(數(shù)據(jù)類型:CObject指針),,
CPtrList(數(shù)據(jù)類型:void指針),,CStringList(數(shù)據(jù)類型:Cstring)。
列表中的位置由抽象數(shù)值POSITION標(biāo)示,,POSITION實際上是指向CNode數(shù)據(jù)結(jié)構(gòu)的指針,。

用CList創(chuàng)建類型安全列表類
CList<CPoint,CPoint&>list;
如果在CList中使用了類而不是原始數(shù)據(jù)類型而且調(diào)用列表的Find函數(shù),則必須實現(xiàn)下列之一:
1.類重載==運算符
2.覆蓋模板函數(shù)CompareElements,。

否則程序不會得到編譯,。

重載==運算符:
class CPoint3D
{
public:
CPoint3D(){x=y=z=0}
CPoint3D(int xPos,int yPos,int zPos)
{
   x=xPos;
   y=yPos;
   z=zPos;
}
operator==(CPoint3D point)const
{
   return (x==point.x&&y==point.y&&z==point.z);
}
public:
int x,y,z;
};

覆蓋模板函數(shù)CompareElements:
class CPoint3D
{
public:
CPoint3D(){x=y=z=0}
CPoint3D(int xPos,int yPos,int zPos)
{
   x=xPos;
   y=yPos;
   z=zPos;
}
public:
int x,y,z;
};

BOOL AFXAPI CompareElements(const CPoint3D*P1,const CPoint3D*P2)
{
return(P1->x==P2->x&&P1->y==P2->y&&P1->z&&P2->z);
}

映射表
設(shè)計映射表的主要目的就是給定一個關(guān)鍵字,可以很快地在表中找到對應(yīng)的項目,,
通常只查找一次,。
映射表生成后不久,會為一個列表分配內(nèi)存空間,,該表實際上是一個指向CAssoc
結(jié)構(gòu)指針的數(shù)組,,MFC使用CAssoc結(jié)構(gòu)來給映射表添加項目和關(guān)鍵字,。
例如CMapStringToString定義CAssoc:
struct CAssoc
{
CAssoc*pNext;
UINT nHashKey;
CString key;
CString Value;
};

CAssoc結(jié)構(gòu)存放在散列表數(shù)組中,,索引號為:i=nHashValue%nHashTableSize,
參見P254圖5-1,如果索引號相同,,則會鏈成一個鏈表,。

用CMap創(chuàng)建類型安全映射表
CMap<CString,CString&,CPoint,CPoint&>map;
如果使用自己的類調(diào)用CMap::Lookup則仍需重載==運算符或覆蓋CompareElements函數(shù)。

類型指針類

CTypedPtrList<CObList,CLine*>list;
...
CLine*pLine=new CLine(x,0,x,100);
list.AddTail(pLine);                     //CLine*--》CObject*
...
CLine*pLine=list.GetNext(pos); //無需強(qiáng)制轉(zhuǎn)換了

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多