MFC 的CList,CPtrList,CObList,CStringList 用法之CPtrList

头歌 JAVA 桥接模式实验 这样,通过客户端代码配置不同的 FileConvertor 子类和 DataHandler 子类(如 OracleHandler 或 SQLServerHandle),即可实现从不同数据库读取数据并转换成不同格式的功能,而无需修改已有代码。 阅读详情

转自:http://blog.youkuaiyun.com/mfreesky/archive/2007/08/02/1722223.aspx

 

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.pVMFC 的CList,CPtrList,CObList,CStringList 用法之CPtrList收藏

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->OperateDb(str);
       }

ocFile=(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->OperateDb(str);
       }
AutoSAR系列讲解 - 总目录 博主想在开始前先讲一下我们的具体安排,这里就以目录加说明的形式展示出来,同时这也可以作为大家学习AutoSAR的参考。由于实践篇需要在很久以后才会更新,所以这里我们先罗列一下理论篇的内容,实践篇等开始更新的时候我再补充上 阅读详情

相关推荐

OPNET卫星节点仿真避坑指南:为什么你的STK轨道文件导入后位置不对?

本文深入解析OPNET卫星节点仿真中STK轨道文件导入后位置异常的常见问题,揭示坐标系差异(ECI与ECF)、时间基准不匹配等关键因素。通过修改.SA文件头标识、统一时间基准等解决方案,帮助工程师避免仿真失真,提升卫星通信系统仿真的准确性。特别适用于STK与OPNET协同工作的卫星网络仿真场景。

weixin_30335575的博客 600

CPtrList操作--插入,删除特定元素,删除全部

新建一个基于对话框的MFC应用程序,界面如下(属性等全采用默认): 首先,添加一个简单的结构体定义(可选择在对话框类定义的前面): typedef struct _tagNode { CString name; int age; }Node;  再为对话框类添加一个成员变量: private:          CPtrList m_list;   接着为对话...

weixin_33932129的博客 314

期末求生指南:手把手教你用浏览器开发者工具绕过百一测评切屏检测

本文详细介绍了如何利用浏览器开发者工具绕过百一测评的切屏检测功能。通过分析JavaScript事件监听机制,定位关键检测代码,并提供实时调试和本地覆盖两种修改方法,帮助学生在遵守规则的前提下更灵活地应对在线考试。文章还包含风险控制和替代方案等实用建议。

weixin_28698059的博客 547

MFC 中的CList,CPtrList,CObList,CStringList有什么区别?

http://blog.youkuaiyun.com/NetSniffer/archive/2005/05/27/382150.aspxCList是通用型的列表类,你可以存放指定的数据类型,用法如下:CList list;这样就指定了CList中存放的是CPoint类型的引用;CPtrList,CObList,CStringList都是具体的用于某种类型的集合类型而CPtrList存放的是void类型

黑色幽灵的专栏 3234

手把手教你用TJA1145A实现CAN节点智能唤醒(含数据帧过滤技巧)

本文详细介绍了如何使用TJA1145A收发器实现CAN节点的智能唤醒功能,包括数据帧过滤技巧和超低功耗设计。通过硬件级帧过滤和双条件唤醒机制,TJA1145A在保持微安级休眠电流的同时,能对特定报文做出毫秒级响应,显著提升电池供电设备的续航能力。

weixin_28721917的博客 249

无监督学习初探:K-Means聚类与主成分分析(PCA)

K-Means适用于快速分组,但对数据分布敏感,可结合轮廓系数评估质量。PCA通过特征值分解实现线性降维,需注意非线性场景的替代方案(如UMAP)。进阶方向:聚类:谱聚类、高斯混合模型(GMM)处理复杂形状。降维:t-SNE、自编码器处理非线性结构。

weixin_69882801的博客 1453

MFC 的CList,CPtrList,CObList,CStringList 的用法

导读:   一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用。相关介绍如下,参照msdn搞清接口即可使用   CList是通用型的列表类,你可以存放指定的数据类型,用法如下:   CList list;   这样就指定了CList中存放的是CPoint类型的引用;   CPtrList,CObList,CStringList都是具体

1290

Python与PyCharm安装配置教程:从零搭建开发环境

编程入门的第一步是搭建开发环境,而Python解释器与IDE工具的选择常让新手困惑。Python作为解释型语言,负责将代码翻译为机器指令,而PyCharm作为集成开发环境,提供代码编辑、调试与项目管理功能,两者协同工作构成高效开发基础。环境变量PATH的配置是安装过程中的关键环节,正确处理可避免“python不是内部或外部命令”的常见错误。理解pip包管理机制,则能轻松安装第三方库并管理项目依赖。从下载官方安装包到运行第一个Hello World程序,再到利用虚拟环境隔离应用依赖,这套流程适用于Window

benben 683

MFC 的CList,CPtrList,CObList,CStringList 的用法之CList

 CList 类 在程序设计当中经常会出现使用同种数据结构的不同实例的情况。例如:在一个程序中可以使用多个队列、树、图等结构来组织数据。同种结构的不同实例,也许只在数据元素的类型或数量上略有差异,如果对每个实例都重新定义,则非常麻烦且容易出错。那么能否对同种类型数据结构仅定义一次呢?答案是肯定的,C++提供的类模板(Class Template)就可以实现该功能。一、类模板类模板是C++提供的

zzq_gates的专栏 4683

用Java实现对接豆包ai火山引擎详细版简单明了ai对话

第二部分代码实现。

m0_72637700的博客 8607

把 Client 当成 ABAP 系统的多租户底座:从 sy-mandt 到 CDS_CLIENT 的隔离机制与工程实践

本文深入解析SAP ABAP系统中Client概念的本质与应用。Client不仅是数据表的MANDT字段,更是会话级别的隔离边界,贯穿用户登录、授权和数据访问控制全过程。文章从ABAP SQL的隐式Client处理机制出发,详细介绍了USING CLIENT、USING ALL CLIENTS等安全跨客户端访问方式,并对比了传统CLIENT SPECIFIED的风险。同时阐述了ABAP CDS中@ClientHandling注解的类型与算法选择,包括#AUTOMATED自动拼接和#SESSION_VARIA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 182

zz MFC 的CList,CPtrList,CObList,CStringList 的用法

from http://blog.youkuaiyun.com/guanchanghui/archive/2006/09/16/1232109.aspx 一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用。相关介绍如下,参照msdn搞清接口即可使用CList是通用型的列表类,你可以存放指定的数据类型,用法如下:CList list;这样就指定了C

669

华为OD机试双机位C卷-FLASH坏块监测系统(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【FLASH坏块监测系统】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - FLASH坏块监测系统。

qq_45776114的博客 1928

MFC 的CList,CPtrList,CObList,CStringList 用法之CStringList

CStringList存放CString字符串类型,相当于CListCString str1;CString str2;CStringList m_lsFiles;  for ( int uFile = 0; uFile {str1.Format("%d" ,uFile);                  m_lsFiles.AddTail(str1);} // end forf

mfreesky的专栏 2401

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: Invalidate()函数,WM_PAINT,OnDraw函数的关系
下一篇: OnClose和OnDestroy 窗口关闭过程的消息路由
mxling
博客等级 码龄19年 37粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值