MFC CList 类的使用

MFC提供CList 类;

类CList支持可按顺序或按值访问的非唯一对象的有序列表;CList 列表与双链接列表行为相似;
类型POSITION的变量是列表的关键字;可使用POSITION变量作为循环因子来顺序遍历列表,作为书签来保存位置;

CList 类的头文件是 <afxtempl.h>;

CList类的成员

构造函数
    构造一个空的有序列表  

GetHead 返回列表的标题元素(不能为空)  
GetTail 返回列表的末尾元素(不能为空)  

RemoveHead 从列表标题中移走元素  
RemoveTail 从列表末尾移走元素  
AddHead 添加一个元素(或另一个列表的所有元素)到列表标题(生成新的标题)  
AddTail 添加一个元素(或另一个列表的所有元素)到列表尾部(生成新的尾部)  
RemoveAll 从列表中移走所有元素  

GetHeadPosition 返回列表标题元素的位置  
GetTailPosition 返回列表尾部元素的位置  
GetNext 获取用于遍历下一个元素  
GetPrev 获取用于遍历的前一个元素  

GetAt 在指定位置上获得元素  
SetAt 在指定位置上设置元素  
RemoveAt 从列表中删除一个由位置确定的元素  

InsertBefore 在指定位置前插入一个新的元素  
InsertAfter 在指定位置后插入一个新的元素  

Find 获得由指针值确定的元素位置  
FindIndex 获得由基于零的索引指定的元素位置  

GetCount 返回此列表中的元素数  
IsEmpty 检测空列表的情况(没有元素)

下面看一下存储CString对象和CPoint对象的遍历;

void CCltestView::OnDraw(CDC* pDC)
{
	CCltestDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CList<CString ,CString&> list;
	int i=0;
 
	CString str1="hello"; 
	CString str2="world"; 
	CString str3="AAA"; 
	CString str4="BBB"; 
	list.AddTail(str1); 
	list.AddTail(str2); 
	list.AddTail(str3); 
	list.AddTail(str4); 

	POSITION pos = list.GetHeadPosition(); 
	while(pos!=NULL)
	{ 
		pDC->TextOut(100,100+i*30,list.GetNext(pos));
		i = i+1;
	}


	CString mystr;
	CPoint mypt;
	CList <CPoint , CPoint &> listPoint;
	for (int Index = 0; Index < 10; Index++)
	{
		CPoint pt(Index , Index);
		listPoint.AddTail(pt);
	}
 
	i=0;
	POSITION pi = listPoint.GetHeadPosition();
	while(pi!=NULL)
	{
		mypt = listPoint.GetNext(pi);
		mystr.Format("%d,  %d", mypt.x, mypt.y);
		pDC->TextOut(250,50+i*30,mystr);
		i=i+1;
	}
}

运行如下;

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/131930745