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

C++ 实现链表类(链表的各种操作) Node.h: #ifndef NODE_H #define NODE_H template <class T> class Node { public: Node<T> *next; Node<T> *prev; T data; }; #endif //TEST1_NODE_H List.h: #ifndef LINK_... 阅读详情

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

基于模板的集合类、非基于模板的集合类。

这两种集合类对用户来说非常相似。基于模板的集合所包含的元素是用户自定义的数据结构或者说是抽象的数据结构,它以数组、链表和映射表三种方式组织用户自定义的数据结构。使用基于模板的集合类需要用户作一些类型转换工作。非基于模板的集合类提供的是一组现成的、用于某种预定义的数据类型(如CObject、WORD、BYTE、DWORD、字符串等)的集合。在设计程序时,如果所用的数据类型是预定义的,如下面的编辑要用到的字符串,则使用非基于模板的集合类;如果所用得数据类型是用户自定义的数据结构类型,那就要用到基于模板的集合类。

根据对象在集合中的组织合存储方式,集合类又可分为三种类型:链表、数组、映射(或字典)。应当根据特定的编程问题,选择适当的类型。

链表

链表类用双向链表实现有序的、非索引的元素链表。链表有一个头或尾。很容易从头或尾增加或删除元素、遍历所有元素,在中间插入或删除元素。链表在需要增加、删除元素的场合效率很高。非基于模板的链表有三种:CObList、CPtrList、CStringList,分别用于管理对象指针、无类型指针和字符串。可以使用链表创建堆栈和队列。

要访问链表的成员,可以使用GetNext和GetHeadPosition()。

要删除链表的成员,可以用GetHeadPosition()和GetNext()来遍历链表,然后用delete删除其中的对象,最后调用RemoveAll删除链表所包含的指针。

数组

数组类提供一个可动态调整数组大小的、有序的、按整数索引的对象数组。

数组在内存中连续的存放固定长度的数组元素。数组的最大优点是可以随时存取任一元素。数组类包括基于模板的CArray,它可以存放任何类型的数据;MFC还为字节、字、双字、CString对象、CObject指针和无类型指针提供了预定义的类。数组的元素可以通过一个以零为基础的整数下标直接进行访问。下标操作符([])可用于设置或检取数组元素。

如果要设置一个超过数组当前范围的元素,可以指定该数组是否自动增大。但是如果要调整数组大小时,则数组占用的内存块需要重新移动,效率很低。如果不要求调整数组大小,则对数组集合的访问和对标准C数组的访问一样快。

在使用数组之前,应使用SetSize建立其大小,并分配内存。若不用SetSize,象数组添加元素时会导致频繁的再分配内存和拷贝数据。

数组类适用于那些需要快速检索、很少需要增加或删除元素的集合。

数组通过GetAt(索引值)来访问数组中的成员。

要删除数组中的成员,可以用GetSize()取得大小,然后遍历数组中成员,用delete删除,然后调用RemoveAll()清除其中的指针数据。

下面是使用数组模板类的例子:

CArray<CMyClass,CMyClass&> myArray;

CMyClass myClass;

myArray->Add(myClass);

映射

映射类以一种字典的方式组织数据。每个元素由一个关键字和一个数值项组成,关键字用作数值项的标识符,在集合中不允许重复,必须是唯一的。如果给出一个关键字,映射类会很快找到对应的数值项。映射查找是以哈希表的方式进行的,因此在映射中查找数值项的速度很快。除了映射类模板外,预定义的映射类能支持CString对象、字、CObject指针和无类型指针。比如,CMapWordToOb类创建一个映射表对象后,就可以用WORD类型的变量作为关键字来寻找对应的CObject指针。映射类最适用于需要根据关键字进行快速检索的场合。

要访问映射中的数据,可以用GetStartPosition()定位到开始处,再用GetNextAssoc访问映射表中的成员。

要删除映射中的数据,可以用GetStartPosition和GetNextAssoc遍历并用delete删除对象,然后调用RemoveAll。

下面是使用CMap模板类的例子:

CMap<CString,LPCSTR,CPerson,CPerson&> myMap;

CPerson person;

LPCSTR lpstrName=“Tom”;

myMap->SetAt(lpstrName,person);

有关集合类的使用可以参见MFC的例子COLLECT。

VC使用CPtrList类创建和使用链表 VC与C++开发基础\使用CPtrList类创建和使用链表 立即下载

相关推荐

手把手教你用DevExpress Patch工具解决VS项目中的试用弹窗问题

本文详细指导开发者使用DevExpress Patch工具解决Visual Studio项目中恼人的试用弹窗问题。核心在于理解并分步处理:首先正确应用补丁工具以绕过运行时验证,然后重点清理或重置项目中的licenses.licx文件以消除编译时验证,从而彻底根治弹窗。

weixin_29234423的博客 590

C++链表类及链表常用功能实现

使用C++编写链表类,实现以下功能: 建立链表 删除链表 插入元素(链表尾部或者指定位置) 删除元素(指定位置) 查找第K个元素 查找某个元素值是否存在 逆序链表 为了使链表可以用于不同数据类型,因此使用了模板类。 1,节点类 链表的每个节点都是一个独立的单元,每个单元由数据和指向下一节点的指针构成 //定义链表节点 template &amp;amp;lt;class T&amp;amp;gt; class Node {...

chenyr0021 8629

从零搭建ROS1导航小车(一):松灵SCOUT Mini底盘通讯配置与ROS包编译避坑指南

本文详细介绍了从零开始搭建ROS1导航小车的初始步骤,重点讲解松灵SCOUT Mini底盘的通讯配置与ROS包编译避坑指南。内容包括硬件连接、CAN通讯配置、ROS工作空间构建及编译优化等实用技巧,帮助开发者快速实现自主导航小车的通讯功能。

weixin_27014595的博客 189

MFC中的集合类1

STL中的集合类数组、列表、关联,MFC中也有相似的类,下面列出MFC中的一些使用方法。 实际上集合类就是数据结构中的顺序存储结构和链表存储结构。它的优点就是建立这样的存储结构简单,并且把相关的操作集中成函数,方便用户的调用。比如顺序存储用到数组,如果要在数组中的固定位置添加一

David_jiang 3100

MIC(Maximal Information Coefficient)最大互信息系数

MIC(Maximal Information Coefficient)最大互信息系数是一种用于衡量两个变量之间相关性的统计量。它扩展了传统的互信息(MI)和条件互信息(CMI)的概念,具有更广泛的应用范围。MIC能够捕获包括功能性和非功能性的广泛的关联,具有普遍性和公平性。普遍性意味着在足够的样本量下,MIC能够捕捉到广泛的相关关系,而不仅仅局限于特定的功能类型;公平性则意味着MIC对不同类型的包含同等噪声的关系给出了相似的分数。需要注意的是,虽然MIC具有很多优点,但它也有一些局限性。

qlkaicx的博客 4605

功率半导体器件选型指南:从GTO、GTR到MOSFET、IGBT的原理与应用

功率半导体器件是电力电子系统的核心,如同电路中的智能开关,负责电能的转换与控制。其工作原理基于半导体材料的导电特性,通过控制信号精确管理电路的通断。这类器件的技术价值在于提升能效、减小体积并增强系统可靠性,广泛应用于变频器、逆变器、开关电源及新能源领域。理解不同器件如MOSFET的雪崩能量与IGBT的损耗计算,是进行高效、可靠电路设计的基础。本文聚焦于GTO、GTR、MOSFET和IGBT这四类经典全控型器件的特性对比与选型策略,帮助工程师在具体项目中做出经济可靠的选择。

cumo7370的博客 449

数组和链表和集合的区别和应用场景以及堆和栈的区别

数组和集合的区别:   1.数组的长度固定的,超过长度时,只能创建一个新的数组,并把旧的数组的值传进去方可; 而集合的长度是动态不固定的。 2.数组的存储类型是单一的,同一数组只能存储同一数据类型的数据。 而集合可以存储多钟数据类型的数据。 3.数组只能通过下标来访问数据,而集合可以通过多种类型来查找,比如map就可以通过键值对来进行查找。List也可以通过索引来进行查找。   数...

qq_37455615的博客 3621

鸿蒙读书笔记1:《鸿蒙操作系统设计原理与架构》

GUI、 语 音 控 制 方 式 的 VUI(Voice User Interface, 语 音 用 户 界。电话、多媒体、DFX、MSDP(Multimodal Sensor Data Platform,多。面)、手势/姿态控制的CVUI(Computer Vision User Interface,计算。KAL(Kernel Abstract Layer,内核抽象层)通过屏蔽多内核差异,JavaScript、C、C++等多语言的用户程序开发框架,以及UI框架、

jackyrongvip的专栏 2451

c++集合详解

/返回集合 s 中等于 x 的元素个数,时间复杂度O(k+logn),其中 k 为元素 x 的个数。比如说每个班级就是一个集合,竞赛班也是一个集合,每间学校也是一个集合,等等。但是正如刚刚所说的,如果一个集合没有顺序,那么我们在遍历这个集合的时候存在着困难,因此,我们还是会按照顺序来整理元素(3. 无序性 表示一个集合当中的元素没有顺序,就像班级调座位一样,谁都可以坐前排,谁都可以坐后排,是平等地位的。2. 互异性 表示一个集合当中所有元素都是不一样的,不存在在一个集合中,出现两个一模一样的元素。

浪子回头 4049

2023.03.27更新大麦网PC端抢购软件和使用教程

近期发现大麦网页端抢购页面悄然发生变化,之前可以在页面选择票价、档次,并且点击按钮进行购票,现在不行了,新的页面如下图所示。已经安全没有了点击按钮,因此,但是并不代表不能像以前之前那样。

猫敷雪 1万+

代数拓扑与AI架构:AI应用架构师深入探索数学研究如何分析复杂系统的结构特性

随着人工智能技术的飞速发展,AI系统变得越来越复杂。AI应用架构师需要有效的工具和方法来理解、设计和优化这些复杂系统。代数拓扑作为数学的一个分支,提供了独特的视角和技术来分析复杂系统的结构特性。本文旨在帮助AI应用架构师深入了解代数拓扑,以及如何将其应用于AI架构设计中,提升对复杂系统的分析能力。首先,我们会介绍代数拓扑和AI架构相关的核心概念及其联系,通过有趣的故事引入主题,让读者轻松理解复杂概念。接着,深入探讨代数拓扑的核心算法原理,结合具体的编程语言代码示例详细阐述。

大模型应用工坊 671

Java 集合、List、链表、比较器

1. Collection 1.1概述 Java集合是使程序能够存储和操作元素不固定的一组数据。所有Java集合类都位于java.util包中 数组和集合的区别 : 数组 : 长度固定,可存放任意类型 集合 : 长度不固定, 不能存放基本数据类型,只能存放对象的引用 注意 : 如果集合存放基本数据类型,一定要将其"装箱"成对应"基本类型包装类"。 1.2继承体系 由以上两图我们可以看出Java集合类有清晰的继承关系,有很多子接口和实现类。但是,并不是所有子接口或实现类都是最常用的。...

qq_58765786的博客 639

Go语言面试:面试中经常被问到的50个经典面试题(附参考答案)

Go语言核心知识点摘要 基础语法与数据结构 make和new区别:new分配零值内存返回指针,make初始化引用类型返回实例 Slice底层:包含指针、长度、容量的结构体,多个slice可共享底层数组 nil与空slice:nil指针为nil,空slice指针非nil但JSON编码不同 Map原理:哈希表实现,非线程安全,扩容策略影响性能 for range注意:循环变量是拷贝,map遍历无序 defer执行:LIFO顺序,函数返回前执行 Struct比较:仅当所有字段可比较时才可比较 参数传递:只有值传递

数据知道的博客 4726

VC++中CMAP用法

参考一: 映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”,就像一种只有两列的表格,一列是关键字,一列是数据项,它们是一一对应的。关键字是唯一的,给出一个关键字,映射表类会很快找到对应的数据项。映射表的查找是以哈希表的方式进行的,因此在映射表中查找数值项的速度很快。映射类最适用于需要根据关键字进行快速检索的场合,我们的程序中就用映射表来保存计时器标志值和类实例指针,用计时器

strugglingl的专栏 872

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++链表类

C++链表类

qq_44205540的博客 1091

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

集合-链表

文章目录1. 什么是链表2. 链表的种类3. 链表与数组的区别4. 链表的使用 1. 什么是链表 链表: 链表是由一组不必相连(可相连可不相连)的内存结构(节点)按特定的顺序链接在一起的抽象数据类型。 链表是离散存储线性结构 离散: 链表的每个节点可能存于不相连的内存块中,即两个或多个节点所处的内存块的内存地址不相连,所以说链表是离散的。 线性: 通过链表的头结点可以找到下一个节点,直至找到尾结点,就像多个有顺序的点可以连成一条线,所以说链表是线性的。 链表由节点组成,链表的节点离散分配,节点彼此通过指针相

fire57的博客 640

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构(2):集合、链表、数组

I:概念      集合:用于存储无需元素,值不能重复      链表:是一种线性表,但是并不会在物理存储上分配一块连续空间来存储它,而是在每一个节点里维护一个指针(pointer)指向下一个节点。因此这n个节点是离散分配的,彼此通过指针相连,链表的插入和删除操作复杂度为O(1),查询复杂度为O(n),链表中主要介绍3类,单向链表、双向链表、循环链表。                 单向链...

tianping25的博客 731

集合类(collection classes)

集合类是用来容纳和处理一组对象或标准数据类型变量的C++类。每个集合类对象可以看作一个单独的对象。类成员函数可作用于集合的所有元素。MFC提供两种类型的集合类: 基于模板的集合类 非基于模板的集合类 这两种集合类 对用户来说非常相似。基于模板的集合所包含的元素是用户自定义的数据结构或者说是抽象的数据结构,它以数组、链表和映射表三种方式组织用户自定义的数据结构。使用基于模板的集合类需要

xuyongbeijing2008的专栏 977

VC++基础 链表的操作示例

定义测试的结构体:struct CAccount { CString m_name;//名目 double m_count;//费用 };链表定义单元引用#include "PtrList.h"定义链表:CPtrList m_accountlist;操作示例:CAccount* m_pAccount = new CAccount;//创建结构体对象指针 switch(m_radio) { case 0: //插入操作 if(m_name.IsEmpty

genispan的专栏 5224

MFC CList使用

转自:http://blog.sina.com.cn/s/blog_5cda82f40100aw58.html 一、类的概要和头文件 1. CList类:产生不定类型的列表,是一个集合类,也是一个双向链表类,是一个类模板。 2. #include "Afxtempl.h"   //包含头文件 3. CList的构造函数,举例如下: CList list;

我的英文站点:https://iorilan.medium.com/ 4736

c语言链表详解(超详细)

链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。说到这里你应该就明白...

Endeavor_G的博客 64万+

VC 链表操作

#include #include #include #include //编译时需要使用多线程的版本的运行库 CStringList strList; void print() { //获得节点的数量 int nCount=strList.GetCount(); cout //遍历链表的一种方法 for(int i=0;i {    //根据序号(从头

fin86889003的专栏 1058

单链表

SCUT 段九鼎(C/C++学生) 389
上一篇: 多线程基础
下一篇: class 与include的区别
skyandcode
博客等级 码龄14年 53粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值