對于MFC中所提到的基本容器類,做一個基本的介紹和程式設計操作。
如有資料結構基礎,可以直接看第四部分對容器類的操作。
第一,MFC提供三種基本的容器類:arrays(數組), lists(連結清單), maps(映射,也稱作字典).
第二,各容器類的特征分類
類型 | 排序? | 索引? | 插入元素 | 查找特定元素 | 重複的元素? |
List | Yes | No | Fast | Slow | Yes |
Array | Yes | By int | Slow | Slow | Yes |
Map | No | By key | Fast | Fast | No (keys) Yes (values) |
第三,模闆容器類和非模闆容器類
模闆容器類:
Collection contents | Arrays | Lists | Maps |
任意對象類型的容器 | CArray | CList | CMap |
任意對象指針類型的容器 | CTypedPtrArray | CTypedPtrList | CTypedPtrMap |
非模闆容器類:
Arrays | Lists | Maps |
CObArray | CObList | CMapPtrToWord |
CByteArray | CPtrList | CMapPtrToPtr |
CDWordArray | CStringList | CMapStringToOb |
CPtrArray | CMapStringToPtr | |
CStringArray | CMapStringToString | |
CWordArray | CMapWordToOb | |
CUIntArray | CMapWordToPtr |
第四,模闆容器類的使用
1,簡單的容器類的使用 CArray, CList, CMap
1.1 CArray的使用
基本資料類型 ,如int, char, and float
CArray<int, int> myArray;
結構體或者類
CArray<CPerson, CPerson&> myArray;
1.2 CList的使用
基本資料類型 ,如int, char, and float
CList
<int, int> myList;
結構體或者類
CList<CPerson, CPerson&> myList;
1.3 CMap的使用
CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCSTR, CPerson, CPerson& > myMap2;
//map映射表
CMap<int, int, CPoint, CPoint> myMap;
//初始化哈希表,并指定其大小(數字為120%容量,最好取奇數)
myMap.InitHashTable(13);
//添加中繼資料
for (i=0; i<10; i++)
{
myMap.SetAt(i, CPoint(i,i*i));
}
//周遊一次
POSITION pos = myMap.GetStartPosition();
while(pos != NULL)
{
CPoint pt;
myMap.GetNextAssoc(pos, i, pt);
}
//查找特定元素
pos = myMap.GetStartPosition();
while(pos != NULL)
{
CPoint pt;
myMap.GetNextAssoc(pos, i, pt);
if (i == 3)
{
CString str;
str.Format(_T("x:%d y:%d"), pt.x, pt.y);
MessageBox(str);
}
}
//删除資料
myMap.RemoveAll();
2, 指針類型的容器類的使用 CTypedPtrArray, CTypedPtrList, CTypedPtrMap
2.1 CTypedPtrArray的使用
CTypedPtrArray<BASE_CLASS, TYPE>
//BASE_CLASS:為 CObArray or CPtrArray
CTypedPtrArray<CObArray, CPerson*> myArray;
2.2 CTypedPtrList的使用
CTypedPtrList<BASE_CLASS, TYPE>
//BASE_CLASS: 為 CObList or CPtrList
CTypedPtrList<CPtrList, MY_STRUCT*> myList;
2.3 CTypedPtrMap的使用
CTypedPtrMap<BASE_CLASS, KEY,VALUE>
//BASE_CLASS: 為CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb
CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CMyObject*> myObjectMap;
文章轉自:http://www.cnblogs.com/chenang/archive/2011/11/16/2251424.html