一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用。
相关介绍如下,参照msdn搞清接口即可使用

CList是通用型的列表类,你可以存放指定的数据类型,用法如下:
CList<CPoint, CPoint&> list;
这样就指定了CList中存放的是CPoint类型的引用;

CPtrList,CObList,CStringList都是具体的用于某种类型的集合类型
而CPtrList存放的是void类型的指针,取出的时候必须要强制转换;
CObList用于存放从CObject派生的数据类型的指针;
CStringList存放CString字符串类型,相当于CList<Cstring,CString>

CPtrList类支持void指针列表。CPtrList类的成员函数类似于CObList类的成员函数。由于这种类似性,可以使用CObList参考文档作为成员函数的说明。无论在任何时候使用一个CObject指针作为函数参数或返回值,都可以将指针替换为void。例如,CObject* & CObList::Gethead() const;
可以替换成:
void * CPtrList::Gethead() const;CPtrList嵌入了IMPLEMENT_DYNAMIC宏来支持运行类型访问和转储到CDumpContext对象。如果应用程序需要转储各个指针列表元素,则必须将转储环境的深度设置为1或大于1。指针列表不能为NULL。

当一个CPtrList对象被删除时,或当其元素被删除时,只删除指针,而指针所引用的实体并未被删除。#include <afxcoll.h>

CPtrList类成员

CPtrList apStr;
CString str;

一个函数负责往CPtrList里加记录:
apStr.AddTail((LPCSTR)str);

一个函数将CPtrList里所有记录读出来:
POSITION pos apStr.GetHeadPosition();
while(pos != NULL)
{
    str = apStr.GetNext(pos);
    // 这里,你就可以使用str了
}

上面有一句漏了=号:
POSITION pos = apStr.GetHeadPosition();

再请问CPtrList里能存结构的指针吗?

当然可以。
struct AAA
{
    int a;
    int b;
};
AAA * aa=new AAA;
CPtrList pList;
pList.AddTail(aa);

在使用CPtrList链表类时,其添加的对象常为结构体。其使用的方法一般分为三步:(1)分配空间,添加数据。
(2)初始化时,释放空间。
(3)数据的使用。
下面举一个具体的例子来说明:
1.定义一个结构体:
struct VocFile
{
 char vocPath[255];
 int vocId;
 char pwd[20];
};
一般为全局变量。
2.定义结构体变量和链表变量。
 CPtrList vocFileList;
 struct VocFile *pVocFile;
3.在使用前如果分配空间,则释放空间
 POSITION pos=NULL;
 pos=vocFileList.GetHeadPosition();
 while(pos!=NULL)
 {
  pVocFile=(struct VocFile*)vocFileList.GetNext(pos);
  free(pVocFile);
 }
 vocFileList.RemoveAll();
4.分配空间,添加到链表中。
 while(!m_pRecordset->adoEOF)//遍历所有记录
  {

getnotice->pVocFile=(struct VocFile *)malloc(sizeof(struct VocFile));
  memset(getnotice->pVocFile,0,sizeof(struct VocFile));

TheValue = m_pRecordset->GetCollect("序号");//
   if(TheValue.vt!=VT_NULL)
   {
   // pVocFile
    getnotice->pVocFile->vocId= atoi((char*)_bstr_t(TheValue));
   // getnotice->vocId[i] = atoi((char*)_bstr_t(TheValue));
   }
   TheValue = m_pRecordset->GetCollect("密码");//
   if(TheValue.vt!=VT_NULL)
   {
    strcpy(getnotice->pVocFile->pwd,(char*)_bstr_t(TheValue));
    //strcpy(getnotice->pwd ,(char*)_bstr_t(TheValue));
   }
   TheValue = m_pRecordset->GetCollect("语音路径");//
   if(TheValue.vt!=VT_NULL)
   {
    strcpy(getnotice->pVocFile->vocPath,(char*)_bstr_t(TheValue));
   // strcpy(getnotice->vocFile[i] ,(char*)_bstr_t(TheValue));
   // AfxMessageBox(getnotice->vocFile[i]);
   }
   getnotice->vocFileList.AddTail(getnotice->pVocFile);
   m_pRecordset->MoveNext();
  }

5.数据的使用

POSITION pos=NULL;  
 pos=getnotice.vocFileList.GetHeadPosition(); 
while(pos!=NULL)

{
        getnotice.pVocFile=(struct VocFile *)getnotice.vocFileList.GetNext(pos);
        SsmStopPlayFile(line_id);
        SsmAddToFileList(line_id,"C:\\VOICE\\notice_split.wav",7,0,-1);
        SsmAddToFileList(line_id,getnotice.pVocFile->vocPath,7,0,-1);//这一行有用的行
     str.Format("update 自动通知表 set 通知状态=1,实际通知时间='%s' where 序号=%d",time_str,getnotice.pVocFile->vocId);
        //log->AppendLog(str);
        db->

C 的CList,CPtrList,CObList,CStringList 用法之CPtrList相关推荐

  1. CList POSITION

    VC的基本头文件AFX.h里对POSITION是这样定义的:  struct __POSITION { };  typedef __POSITION* POSITION  显然这里定义了一个没有任何字 ...

  2. VC里的集合类、链表类、映射类

    集合类是用来容纳和处理一组对象或标准数据类型变量的C++类.每个集合类对象可以看作一个单独的对象.类成员函数可作用于集合的所有元素.MFC提供两种类型的集合类: 基于模板的集合类.非基于模板的集合类. ...

  3. CMap如何使用,如何实例化?

    昨天,去CSND论坛看有人在问,关于CMap的用法,由于平时能用到,感觉的确非常好,很有用. 就在百度空间找到了有关CMpa使用的文章,我把两篇文章整合了. (一)<CArray,CList,C ...

  4. MFC-CListCtrl重绘,添加按钮到单元格

    原文链接 MFC Listctrl 不支持单元格颜色设置,以及单击其中某一单元格时高亮显示,要想达成自己的目的,就只能对其重绘. 关于单元格中按钮的添加,说一下思路,首先要重写CButton类,将其单 ...

  5. emule中节点加入Kad网络过程(源代码详解)【对原文部分改进】

    from: http://blog.csdn.net/chenbuaa/article/details/2301656 emule中节点加入Kad网络过程(源代码详解) 程序启动: EmuleDlg. ...

  6. 网络编程(三)---- MFC 仿QQ聊天软件

    今天来八一八,MFC的SOCKET 编程,利用CSocket实现一个基于TCP实现一个QQ聊天程序.你会发现,MFC要比WIN32 简单的多.但是如果你不理解具体API socket基础知识,你可能会 ...

  7. 改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

    用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便.本文将介绍如何派生一个类来改变 ...

  8. CListCtrl控件使用技巧

    这几天处理单文档中CListCtrl控件,找了不少资料.最后得到以下的使用技巧,记录下来,方便后面用得到.当然可能有不正确的地方,请大家指出. 问题一:修改网格的高度 方法1:直接在OnInitDia ...

  9. MFC 自定义CListCtrl

    本文的代码也是根据网上现有的改编而来 首先是.h #pragma once #include "HeaderCtrlCl.h" // CListCtrlClclass CListC ...

最新文章

  1. 一本Python数据分析入门宝藏书,快藏不住了!
  2. python读取文件路径报invalid_关于Python读取文件的路径中斜杠问题
  3. Django:保持会话状态cookies和session(1)
  4. PWDX查找程序执行路径
  5. 蚂蚁爬绳问题 java_趣味数学网
  6. 《智能数据时代:企业大数据战略与实战》一2.3 自我评估、完善度、信息架构...
  7. 消息队列中点对点与发布订阅区别(good)
  8. Kaggle TMDB电影数据分析项目实战
  9. python写dnf脚本怎么过检测_python写dnf脚本巡山和捉妖无病毒
  10. 神州三号开发板stm32 f103ze jlink连接失败拜求高手指点
  11. 数据库设计(一、二、三及BCNF范式)
  12. Unity AB加载预设体导致Rotation发生变化
  13. 假设中国某航空公司规定: 中国去欧美的航线所有座位都有食物供应。每个座位都可以播放电影。 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。 中国国内的航班的商务仓有食物供应,但是不可
  14. tipask 问答系统 如何设置第三方一键登录
  15. 查询某个表空间下所有的表的空间占用情况
  16. 关于图像融合 视频融合
  17. 如何做淘宝客推广淘宝客教程视频
  18. netmask的作用
  19. 《Adobe Premiere Pro CC经典教程(彩色版)》——导读
  20. 浏览器访问虚拟机elasticsearch失败

热门文章

  1. 记一次CentOS Install Docker 报错
  2. 摆放家具-家具类以及创建家具对象
  3. 工厂方法源码解析(jdk+logback)
  4. php如何获取百度快照,PHP获取某网站的百度快照日期方法
  5. html追加datatype,jquery ajax中dataType的设置问题
  6. Puppet基于Master/Agent模式实现LNMP平台部署
  7. mysql5.7 solo web服务器
  8. 如何基于Spark进行用户画像?
  9. 写一个 JavaScript 框架:比 setTimeout 更棒的定时执行
  10. eclipse如何快速查找某个类