MFC:关于链表的使用

1. 使用typedef的链表定义方式

typedef CTypedPtrList <CObList, CPSProp *> CPSList

  • 这是一个typedef的重命名,用CPSList代替CTypedPtrList <CObList, CPSProp *>
  • CTypedPtrList 是MFC的一个模板类,CObListCPSProp是它的两个输入参数类型。
    真正使用链表的时候都是这么使用的,而不是那种直接定义一个CObList的链表。CTypedPtrList类是个模板类,一般在软件开发中用到的时候比较多,它的作用就是类似一个链表,下面是这个类的原型

template < class BASE_CLASS, class TYPE> class CTypedPtrList : public BASE_CLASS

(1)第一个参数是链表的基类,这里必须是个指针列表类(如Coblist、CPtrlist,只要是指针列表类),比如CTypedPtrList <CObList, CPSProp *>,实际上这个链表类CTypedPtrList是继承自CObList的;
(2)第二个参数指在链表类中所存放的类型。
为什么不直接用Coblist或者CPtrlist呢?因为CTypedPtrList类又进一步的封装了它的基类,并且为消除了一些错误,还提供了一些类型的强制转化,所以说一般链表都是用CTypePtrList这个模板类。不用担心这个类封装以后会变的速度慢,因为CTypedPtrList类封装以后里面的函数是内联的,如果你想真正想掌握这个模板类还是需要看看他基类提供的成员函数。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用MFC链表类存放学生信息可以按照以下步骤进行操作: 1. 首先,需要创建一个学生信息类,包括姓名和分数两个成员变量。可以定义如下: ```cpp class CStudentInfo : public CObject { public: CString m_strName; // 姓名 int m_nScore; // 分数 }; ``` 2. 然后,在文档类中添加一个链表类的成员变量,用于存放学生信息。可以定义如下: ```cpp CList<CStudentInfo*, CStudentInfo*> m_lstStudentInfo; // 学生信息链表 ``` 3. 在对话框中,可以使用MFC的列表框控件来显示学生信息。在对话框类中添加一个列表框控件的成员变量,并在OnInitDialog函数中初始化列表框。可以定义如下: ```cpp CListCtrl m_lstStudent; // 列表框控件 BOOL CStudentDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 初始化列表框 m_lstStudent.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100); m_lstStudent.InsertColumn(1, _T("分数"), LVCFMT_LEFT, 100); return TRUE; } ``` 4. 在添加学生信息时,可以使用链表类的AddTail函数将学生信息添加到链表的末尾。可以定义如下: ```cpp void CMyDoc::AddStudentInfo(const CString& strName, int nScore) { CStudentInfo* pInfo = new CStudentInfo; pInfo->m_strName = strName; pInfo->m_nScore = nScore; m_lstStudentInfo.AddTail(pInfo); } ``` 5. 在删除学生信息时,可以使用链表类的RemoveAt函数将指定位置的学生信息从链表中删除。可以定义如下: ```cpp void CMyDoc::RemoveStudentInfo(int nIndex) { POSITION pos = m_lstStudentInfo.FindIndex(nIndex); if (pos != NULL) { CStudentInfo* pInfo = m_lstStudentInfo.GetAt(pos); m_lstStudentInfo.RemoveAt(pos); delete pInfo; } } ``` 6. 在显示学生信息时,可以使用链表类的GetHeadPosition和GetNext函数遍历链表,并将学生信息添加到列表框中。可以定义如下: ```cpp void CStudentDlg::ShowStudentInfo() { m_lstStudent.DeleteAllItems(); POSITION pos = m_pDoc->m_lstStudentInfo.GetHeadPosition(); int nIndex = 0; while (pos != NULL) { CStudentInfo* pInfo = m_pDoc->m_lstStudentInfo.GetNext(pos); m_lstStudent.InsertItem(nIndex, pInfo->m_strName); m_lstStudent.SetItemText(nIndex, 1, CString().Format(_T("%d"), pInfo->m_nScore)); nIndex++; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值