当前位置: 首页 > news >正文

CArray原理是什么,通过示例来展示如何使用?

CArray是MFC(Microsoft Foundation Class)库中的一个模板类,用于实现动态数组的功能。它类似于C语言中的数组,但具有自动增长和缩小的能力,从而方便管理动态数据。以下是对CArray原理的解析以及一个使用示例。

CArray原理

  1. 模板类定义:CArray是从CObject类派生的模板类,有两个模板参数。第一个参数指定存储在CArray中对象的类型,第二个参数是用于访问存储在CArray中元素的类型,通常是一个对第一个参数的引用。
  2. 动态内存管理:CArray能够根据需要动态地分配和释放内存。当向CArray中添加元素时,如果当前内存空间不足,它会自动分配更多的内存空间以容纳新元素。同样地,当从CArray中删除元素时,它会释放不再需要的内存空间。
  3. 数组操作:CArray提供了丰富的数组操作函数,如添加元素(Add)、插入元素(InsertAt)、删除元素(RemoveAt)、获取元素(GetAt)等。这些函数使得对CArray的操作变得简单而高效。
  4. 内存连续性:与链表等数据结构不同,CArray在内存中是连续分配的。这意味着访问CArray中的元素具有常数时间复杂度,与数组大小无关。然而,这种连续性也带来了一个缺点,即在插入或删除元素时可能需要移动大量的数据。

使用示例

以下是一个简单的示例,展示了如何使用CArray来存储和操作整数数组:

#include <afxtempl.h> // 包含CArray类的头文件
#include <iostream>int main() {// 定义一个存储整数的CArray对象CArray<int, int> intArray;// 向CArray中添加元素intArray.Add(10);intArray.Add(20);intArray.Add(30);// 输出数组中的元素for (int i = 0; i < intArray.GetSize(); i++) {std::cout << intArray[i] << " ";}std::cout << std::endl;// 在指定位置插入元素intArray.InsertAt(1, 15); // 在索引1的位置插入15// 输出插入后的数组元素for (int i = 0; i < intArray.GetSize(); i++) {std::cout << intArray[i] << " ";}std::cout << std::endl;// 删除指定位置的元素intArray.RemoveAt(2); // 删除索引2位置的元素// 输出删除后的数组元素for (int i = 0; i < intArray.GetSize(); i++) {std::cout << intArray[i] << " ";}std::cout << std::endl;// 通过索引访问并修改元素intArray.SetAt(0, 5); // 将索引0位置的元素修改为5// 输出修改后的数组元素for (int i = 0; i < intArray.GetSize(); i++) {std::cout << intArray[i] << " ";}std::cout << std::endl;return 0;
}

输出结果

10 20 30 
10 15 20 30 
10 15 30 
5 15 30 

解释

  1. 添加元素:使用Add函数向CArray中添加元素。这些元素被添加到数组的末尾。
  2. 插入元素:使用InsertAt函数在指定位置插入元素。插入位置之后的所有元素都会向后移动一个位置。
  3. 删除元素:使用RemoveAt函数删除指定位置的元素。删除位置之后的所有元素都会向前移动一个位置。
  4. 访问和修改元素:使用SetAt函数通过索引访问并修改元素。同样地,可以使用operator[]运算符通过索引访问元素。

通过上述示例和解释,可以看出CArray是一个功能强大且易于使用的动态数组类。它提供了丰富的操作函数来满足各种需求,并且能够自动管理内存以提高程序的效率和可靠性。

相关文章:

CArray原理是什么,通过示例来展示如何使用?

CArray是MFC&#xff08;Microsoft Foundation Class&#xff09;库中的一个模板类&#xff0c;用于实现动态数组的功能。它类似于C语言中的数组&#xff0c;但具有自动增长和缩小的能力&#xff0c;从而方便管理动态数据。以下是对CArray原理的解析以及一个使用示例。 CArray…...

更换WordPress主题的基础知识及注意事项

更换WordPress主题是优化和升级网站的重要步骤&#xff0c;不仅能够增强网站的视觉效果&#xff0c;还能改进用户体验并提高网站性能。然而&#xff0c;在进行该操作时&#xff0c;必须格外谨慎&#xff0c;避免数据丢失或功能失调的风险。本文将介绍在更换主题前需要采取的基本…...

springcloud篇3-docker需熟练掌握的知识点

docker的原理请参考博文《Docker与Kubernetes》。 一、安装docker的指令 1.1 安装yum工具 yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken补充&#xff1a;配置镜像源 注意&#xff1a; yum安装是在线联网下载安装&#xff0c;而很多的资源…...

基于单片机的直流稳压电源的设计(论文+源码)

1.系统方案设计 在本次直流稳压电源的设计中&#xff0c;其关键指标如下&#xff1a; 系统输入电压220V交流系统输出直流0到12V可调&#xff0c;步进可以达到0.1V电流最大输出可以到2A具有短路保护功能可以通过液晶或者数码管等显示设备显示当前输出电压 2. 电路图...

uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端

采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件&#xff0c;提供点状、条状的动画过渡效果&#xff0c;支持多项自定义配置&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&…...

解锁 C 语言字符函数密码,开启高效编程之路

文章目录 一、字符函数的构成二、字符函数的分类1、字符分类函数1、isalnum函数2、isalpha函数3、isdigit函数4、islower函数5、isupper函数6、ispunct函数7、isspace函数8、iscntrl函数9、isxdigit函数10、isgraph函数11、isprint函数 2、字符转换函数 三、字符函数的应用 一、…...

LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库

一、必备条件&#xff1a; python语言Neo4j数据库python库&#xff1a;neo4j、llmsherpa、glob、dotenv 二、代码&#xff1a; from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …...

力扣-数组-01两数之和

解析 遍历i和第i1&#xff0c;两个for循环查就可以&#xff0c;时间复杂度是 代码 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ansewer;bool flag false;for(int i 0;i < nums.size(); i){for(in…...

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存&#xff0c;与定制删除本地缓存 1&#xff1a;封装请求图片函数 2&#xff1a;访问的图片都会转为本地缓存&#xff0c;当相同的请求url&#xff0c;会在本地调用图片 3&#xff1a;本地缓存管理【windows与andriod已经测试】【有页面】【有…...

保障移动应用安全:多层次安全策略应对新兴威胁

在数字化时代&#xff0c;移动应用的安全问题变得越来越重要。随着网络威胁的不断升级&#xff0c;确保移动应用的安全性不仅是保护敏感数据的关键&#xff0c;也是维护用户信任的基础。为了应对复杂的安全挑战&#xff0c;企业必须采取先进的技术和多层次的安全策略&#xff0…...

【Linux】函数

一、函数 1、创建函数 如果定义了同名函数&#xff0c;则新定义的函数就会覆盖原先的定义的函数&#xff0c;而且在运行时不会报错。 创建函数的语法&#xff1a; 方法1&#xff1a;使用关键字function function name { commands } shell脚本中的函数名不能重复 方法2&#x…...

Maven中管理SNAPSHOT版本含义及作用

在开发过程中突然产生了一个疑问&#xff1a;IDEA中 maven deploy的依赖包的版本号,比如 1.0.0-SNAPSHOT是在哪配置的&#xff1f;在远程仓库中的版本和这个有关系吗 &#xff1f; 在 Maven 中&#xff0c;-SNAPSHOT 后缀是用于标识项目版本为快照&#xff08;Snapshot&#xf…...

win10 VS2019上libtorch库配置过程

win10 VS2019上libtorch库配置过程 0 引言1 获取libtorch2 在VS上配置使用libtorch库3 结语 0 引言 &#x1f4bb;&#x1f4bb;AI一下&#x1f4bb;&#x1f4bb;   libtorch库是一个用于深度学习的C库&#xff0c;是PyTorch的官方C前端。它提供了用于构建和训练深度学习模…...

【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现

实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1&#xff0e;了解交换机的管理方式。 2&#xff0e;掌握通过Console接口对交换机进行配置的方法。 3&#xff0e;掌握交换机命令行各种模式的区别&#xff0c;能够使用各种帮助信息以及命令进行基本的配置。 4&…...

Oracle Dataguard(主库为单节点)配置详解(4):将主库复制到备库并启动同步

Oracle Dataguard&#xff08;主库为单节点&#xff09;配置详解&#xff08;4&#xff09;&#xff1a;将主库复制到备库并启动同步 目录 Oracle Dataguard&#xff08;主库为单节点&#xff09;配置详解&#xff08;4&#xff09;&#xff1a;将主库复制到备库并启动同步一、…...

OpenCL(贰):浅析CL内核程序接口函数

目录 1.前言 2.获取平台信息 1.cl_int类型 2.cl_platform_id类型 3.clGetPlatformIDs()&#xff1a;查询系统OpenCL平台数量或获取具体的平台信息 4.clGetPlatformInfo()&#xff1a;查询指定OpenCL平台的信息&#xff0c;例如平台名称、供应商、版本等 3.设置OpenCL上下文…...

Leetcode 3407. Substring Matching Pattern

Leetcode 3407. Substring Matching Pattern 1. 解题思路2. 代码实现 题目链接&#xff1a;3407. Substring Matching Pattern 1. 解题思路 这一题是一道leetcode easy的题目&#xff0c;照说应该没啥的&#xff0c;不过实际我做的时候在这里卡了一下&#xff0c;所以还是拿…...

学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a;先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 Functional Testing功能测试[ˈfʌŋkʃənəl ˈtɛstɪŋ]Sample样…...

Vue笔记-001-声明式渲染

https://cn.vuejs.org/tutorial/#step-2https://cn.vuejs.org/tutorial/#step-2 Vue 单文件组件 (Single-File Component&#xff0c;缩写为 SFC) 单文件组件是一种可复用的代码组织形式&#xff0c;它将从属于同一个组件的 HTML、CSS 和 JavaScript 封装在使用 .vue 后缀的文件…...

26考研资料分享 百度网盘

26考研资料分享考研资料合集 百度网盘&#xff08;仅供参考学习&#xff09; 基础班&#xff1a; 通过网盘分享的文件&#xff1a;2026【考研英语】等3个文件 链接: https://pan.baidu.com/s/1Q6rvKop3sWiL9zBHs87kAQ?pwd5qnn 提取码: 5qnn --来自百度网盘超级会员v3的分享…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...