数组
特定类型的MFC数组类 | 特定类型 |
---|---|
CByteArray | 8位字节,BYTE |
CWordArray | 16位字节,WORD |
CDWordArray | 32位字节,DWORD |
CUIntArray | 无符号整型,UINT |
CStringArray | CString |
CPtrArray | 指向void指针 |
CObArray | 指向CObject指针 |
公用的成员函数:
SetSize(int)
[nIndex]
InsertAt(int nIndex, T value, int nTimes)
InsertAt(int nIndex, 数组指针)
SetAt
GetSize
GetUpperBound
RemoveAt
RemoveAll
动态调整数组大小:
为保存数组元素而分配的内存可根据元素的添加或删除而增大或缩小。
SetSize(int)
SetAtGrow
Add
InsertAt
Append
Copy
扩大内存,若内存不足,MFC抛出异常。
try
{
CUintArray array;
array.SetSize(1000);
...
}
catch(CMemoryException* e)
{
AfxMessageBox(_T("error"));
e->Delete();
}
用CArray创建类型安全数组类
CArray<CPoint, CPoint&> array;
for(int i = 0; i < 10; i++)
{
array.SetAtGrow(i, CPoint(i * 10, 0));
}
int nCount = array.GetSize();
for(int i = 0; i < nCount; i++)
{
CPoint point = array[i];
}
使用CArray或其它基于模板的MFC集合类,InsertAt被调用时,先用默认构造创建元素,在用赋值完成赋值。CArray可替代前面特殊类型的Array。
列表
特殊非模板链表类 | 元素 |
---|---|
CObList | CObject* |
CPtrList | void* |
CStringList | CString |
MFC链表中的位置由抽象数值POSITION标识。
成员函数:
AddTail
AddHead
RemoveHead
RemoveTail
RemoveAll
GetNext//1
GetPrev // 2. 1,2接收链表表示当前位置POSITION,返回该位置处元素。同时令传入的POSITION变为Next或Prev。
GetHeadPosition
GetTailPosition
GetHead
GetTail
SetAt(POSITION nPos, T value)
RemoveAt(POSITION nPos)
InsertBefore(POSITION nPos, T value)
InsertAfter(POSITION nPos, T value)
FineIndex(int nIndex)// 返回nIndex对应处的POSITION
Find(T value, POSITION nStartPos)
GetCount
IsEmpty
用CList创建类型安全列表类
CList
BOOL AFXAPI CompareElements(const T* t1,const T* t2)
{
// 相等返回true,不等返回false
}
映射表
特殊类型映射表 | 说明 |
---|---|
CMapWordToPtr | Word–>Ptr |
CMapPtrToWord | Ptr–>Word |
CMapPtrToPtr | Ptr–>Ptr |
CMapWordToOb | Word–>Ob* |
CMapStringToOb | String–>Ob* |
CMapStringToPtr | String–>Ptr |
CMapStringToString | String–>String |
RemoveKey
RemoveAll
GetCount
IsEmpty
GetStartPosition// 1
GetNextAssoc// 2 .1,2结合可以完成枚举
InitHashTable// 指定散列表尺寸,应在未添加项目前调用
Lookup
CMapStringToString map;
...
POSITION nPos = map.GetStartPosition();
while(nPos)
{
CString strKey, strValue;
map.GetNextAssoc(nPos, strKey, strValue);
...
}
类型指针类
// 存在意义不明
类型指针 | 说明 |
---|---|
CTypedPtrArray | 管理指针数组 |
CTypedPtrList | 管理指针链接列表 |
CTypedPtrMap | 管理用指针做项目或关键字的Map |
CTypedPtrList<CObList, CLine*> list;
for(int i = 0; i < 10; i++)
{
int x = i * 10;
CLine* pLine = new CLine(x, 0, x, 100);
list.AddTail(pLine);
}
POSITION nPos = list.GetHeadPosition();
while(nPos)
{
CLine* pLine = list.GetNext(nPos);
}