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

轻量高效的动态指针数组CPtrArray实现

在C开发中动态管理指针集合是常见需求今天分享一款轻量、高效的动态指针数组类CPtrArray其核心作用是统一管理任意类型指针的存储、删除、访问适配单线程下的各类指针管理场景代码简洁且实用性强。CPtrArray采用动态扩容机制默认扩容步长为1024既避免了频繁扩容的性能损耗也减少了内存浪费。构造函数初始化空数组析构函数通过MemFree方法释放内存有效防止内存泄漏确保资源正常回收。核心接口涵盖Append/Add添加元素、DeleteAt/RemoveAt删除元素、GetAt获取元素、SetAt修改元素还有下标运算符重载GetData()使用起来简洁便捷。特别优化了删除逻辑避免内存越界清空末尾指针防止野指针细节处理到位。该类设计简洁无多余冗余代码仅聚焦指针管理核心需求适用于单线程环境下的指针集合管理比如各类对象指针的批量存储与操作是项目开发中一款实用的工具类值得借鉴和直接复用。#if !defined( _PTRARRAY_H ) #define _PTRARRAY_H #include datadef.h // 指针存储节点保存任意类型数据指针 typedef struct { void* m_pObj; // 数据指针 }ST_OBJ; // 动态指针数组管理 void* 指针的动态数组 class CPtrArray { public: CPtrArray( ); // 构造函数 virtual ~CPtrArray( ); // 析构函数 public: void* SetAt(int nIndex, void* pObj); // 修改指定索引元素 int GetCount( ); // 获取有效元素个数 int Append( void* pObj ); // 追加元素自动扩容 int DeleteAt( int nIndex ); // 删除指定索引元素 int RemoveAt(int nIndex) ; // 删除元素别名 void* GetAt( int nIndex ); // 获取指定索引元素 int RemoveAll( ); // 清空所有元素释放内存 int GetSize( ); // 获取元素个数同GetCount int Add( void* pObj ); // 添加元素别名 void* operator []( int nIndex ); // 下标重载 ST_OBJ* GetData(); // 获取数组内存首地址用于排序等 protected: static const int MAXPRESIZE; // 扩容步长 int m_nCount; // 有效元素数量 int m_nMaxSize; // 数组总容量 ST_OBJ* m_pData; // 数据内存指针 private: int MemFree( ); // 内部内存释放 }; #endif /************************************************************************** FILE: PtrArray.CPP Description: 动态指针数组实现用于管理任意类型指针的存储、删除、访问 **************************************************************************/ #include string.h #include stdio.h #include ptrarray.h #include malloc.h // 扩容步长定义 const int CPtrArray::MAXPRESIZE 1024; // 构造函数初始化空数组 CPtrArray::CPtrArray( ) { m_nMaxSize 0; m_pData NULL; m_nCount 0 ; } // 析构函数释放所有内存 CPtrArray::~CPtrArray() { MemFree( ); } // 释放数组内存重置状态 int CPtrArray::MemFree( ) { if(m_pData) { free( m_pData); m_pData NULL; } m_nMaxSize 0; m_nCount 0 ; return 0; } // 获取有效元素个数 int CPtrArray::GetCount( ) { return m_nCount; } // 清空数组释放内存 int CPtrArray::RemoveAll( ) { MemFree(); return 0; } // 追加元素到数组末尾自动扩容 int CPtrArray::Append( void* pObjAdd ) { ST_OBJ* pObj m_pData; if (!pObjAdd) return -1; // 容量不足自动扩容 if (m_nCount 1 m_nMaxSize) { m_nMaxSize MAXPRESIZE; ST_OBJ* pNew (ST_OBJ*)malloc(sizeof(ST_OBJ)*(m_nMaxSize)); if (pNew NULL) { m_nMaxSize - MAXPRESIZE; return -1; } // 拷贝旧数据 if(pObj) { memmove(pNew, pObj, sizeof(ST_OBJ)*(m_nCount)); free(pObj); pObjNULL; } m_pData pNew; } // 添加新元素 m_pData[m_nCount].m_pObj pObjAdd; m_nCount; return m_nCount; } // 删除指定索引元素后面元素前移 int CPtrArray::DeleteAt( int nIndex ) { if (nIndex 0 || nIndex m_nCount) return -1; // 元素前移覆盖 if (nIndex ! m_nCount - 1) { memmove(m_pData[nIndex], m_pData[nIndex 1], sizeof(ST_OBJ)*(m_nCount - nIndex-1)); } // 清空末尾指针避免野指针 m_pData[m_nCount-1].m_pObj NULL; m_nCount--; return m_nCount; } // 获取指定索引的指针 void* CPtrArray::GetAt( int nIndex ) { if (nIndex 0 || nIndex m_nCount) return NULL; return m_pData[nIndex].m_pObj; } // 修改指定索引的指针 void* CPtrArray::SetAt(int nIndex, void *pTagObj) { if (nIndex 0 || nIndex m_nCount) return NULL; m_pData[nIndex].m_pObj pTagObj; return m_pData[nIndex].m_pObj; } // 下标运算符重载 void* CPtrArray::operator []( int nIndex ) { return GetAt(nIndex); } // 删除元素别名函数 int CPtrArray::RemoveAt(int nIndex) { return DeleteAt(nIndex); } // 获取数组大小同GetCount int CPtrArray::GetSize( ) { return GetCount(); } // 添加元素别名函数 int CPtrArray::Add( void* pObj ) { return Append(pObj); } // 获取数据指针 ST_OBJ* GetData() { return m_pData; }

相关文章:

轻量高效的动态指针数组CPtrArray实现

在C开发中,动态管理指针集合是常见需求,今天分享一款轻量、高效的动态指针数组类CPtrArray,其核心作用是统一管理任意类型指针的存储、删除、访问,适配单线程下的各类指针管理场景,代码简洁且实用性强。CPtrArray采用动…...

汽车故障诊断仿真教学软件【哈弗M6PLUS】:技术架构、功能实现与落地实践

在职业教育汽车专业数字化实训转型进程中,长城哈弗M6PLUS作为院校主流实训车型,其故障诊断教学长期面临诸多落地难题:实车故障设置繁琐、损耗率高,抽象的诊断流程难以可视化;传统仿真软件普遍存在车型对标度不足、故障…...

【K8S专题】深入浅出 Kubernetes 探针:存活、就绪与启动探针的原理与实战指南

深入浅出 Kubernetes 探针:存活、就绪与启动探针的原理与实战指南一、 引言:为什么我们需要探针?二、 核心概念详解:三大探针的角色定位1. 存活探针:看门狗2. 就绪探针:流量守门人3. 启动探针:慢…...

Dify低代码平台集成开源模型:快速接入Phi-3-mini-4k-instruct-gguf构建AI应用

Dify低代码平台集成开源模型:快速接入Phi-3-mini-4k-instruct-gguf构建AI应用 1. 引言:低代码时代的AI应用开发 想象一下,你手上有一个强大的开源语言模型Phi-3-mini-4k-instruct-gguf,它能够理解复杂指令、生成专业内容、进行智…...

[特殊字符]️ MusePublicGPU效率提升:EulerAncestral调度器加速原理与调参

🏛 MusePublicGPU效率提升:EulerAncestral调度器加速原理与调参 1. 为什么是EulerAncestral?——它不是最快的,但最稳最出片 你有没有遇到过这样的情况:明明显卡够用,生成一张图却要等一分多钟&#xff1…...

[具身智能-322]:词向量的含义与发展历史、趋势

词向量(Word Embedding)是自然语言处理(NLP)领域的基石技术,它的核心思想是将人类语言中的词汇转换为计算机能够理解和计算的数学形式——即稠密的低维实数向量。简单来说,词向量技术让机器不再把词语看作孤…...

M2LOrder API文档实战:Swagger交互式调试/predict接口参数详解

M2LOrder API文档实战:Swagger交互式调试/predict接口参数详解 1. 引言:从WebUI到API,解锁情绪识别的自动化能力 如果你已经体验过M2LOrder的WebUI界面,用那个简洁的网页输入文字、点击按钮,然后看着它分析出“happy…...

Meixiong Niannian画图引擎在IP形象设计中的应用:从草图到高清定稿案例

Meixiong Niannian画图引擎在IP形象设计中的应用:从草图到高清定稿案例 1. 项目概述 Meixiong Niannian画图引擎是一款专为个人GPU设计的轻量化文本生成图像系统,基于先进的Z-Image-Turbo技术底座,深度融合了meixiong Niannian Turbo LoRA微…...

G-Helper完整指南:解决华硕笔记本性能管理与系统优化的三大痛点

G-Helper完整指南:解决华硕笔记本性能管理与系统优化的三大痛点 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, …...

辩题直击:AI是正向生产力?OpenClaw裁员给出答案

近期科技圈的辩论愈演愈烈:AI到底是推动时代的正向生产力,还是引发失业危机的“负作用制造者”?一边是甲骨文凌晨裁员3万人,直言“AI可替代人力”,郑州某软件公司部署OpenClaw后裁撤一半员工,HR哭诉“被一行…...

Janus-Pro-7B显存优化:7B模型仅需2.1GB VRAM完成图文联合推理

Janus-Pro-7B显存优化:7B模型仅需2.1GB VRAM完成图文联合推理 1. 引言:突破性的显存优化方案 你是否曾经遇到过这样的情况:想要运行一个强大的多模态AI模型,却被显存限制卡住了?传统的7B参数模型通常需要8GB以上的VR…...

ncmdump终极指南:简单三步实现NCM音乐格式快速转换

ncmdump终极指南:简单三步实现NCM音乐格式快速转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密文件无法在其他设备播放而烦恼吗?ncmdump工具让你轻松突破格式限制&#xff…...

PROJECT MOGFACE开发环境配置指南:从Ubuntu系统到模型服务部署

PROJECT MOGFACE开发环境配置指南:从Ubuntu系统到模型服务部署 你是不是也遇到过这种情况:好不容易找到一个心仪的AI模型,比如最近挺火的PROJECT MOGFACE,结果一看部署文档,从系统配置到环境依赖,密密麻麻…...

和AI一起搞事情#:边剥龙虾边做个中医技能来起号道

1. 核心概念 在 Antigravity 中,技能系统分为两层: Skills (全局库):实际的代码、脚本和指南,存储在系统级目录(如 ~/.gemini/antigravity/skills)。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

DAMA-DMBOK中的数据治理组织架构、元数据管理实现路径、数据质量维度测量方法

针对DAMA-DMBOK框架下的这三个核心主题,以下是根据其最新版本(DMBOK2及2024年修订版)所做的深度解析,旨在为数据管理专业人士提供一个系统化的认知框架。 📊 数据治理组织架构:构建三道防线 DAMA-DMBOK指出,数据治理需要建立一个清晰的决策体系,为数据管理提供指导和…...

Healthsea:基于spaCy的补剂效果分析管道

Healthsea:用于探索健康补剂效果的端到端spaCy管道 2021年12月15日 • 38分钟阅读 博客:spaCy, Prodigy | 命名实体识别 | 文本分类 | 生物医学 利用机器学习和自然语言处理创造更好的健康获取方式。本文介绍了Healthsea的开发历程,这是一个端…...

FP6291升压芯片:升压5V/7.4V/12V,适配智能门锁供电需求

在智能门锁硬件设计与实操过程中,常见的痛点是锂电池的常见电压(3.7V、3.2V)与门锁电机的工作电压需求(5V、7.4V、甚至12V)不匹配,电压不足直接导致电机无法正常驱动,进而影响门锁开关功能的实现…...

FreeMove:Windows目录迁移终极解决方案,98%成功率释放C盘空间

FreeMove:Windows目录迁移终极解决方案,98%成功率释放C盘空间 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 你是否经常因为C盘空间不足而烦恼…...

GitHub汉化插件终极指南:3分钟告别英文困扰,畅游中文GitHub世界

GitHub汉化插件终极指南:3分钟告别英文困扰,畅游中文GitHub世界 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese …...

仅限首批23家制造企业内部流通的PHP网关诊断工具包(含Wireshark深度解码插件+PLC异常帧自动归因引擎)

第一章:工业PHP物联网数据网关开发概览工业物联网(IIoT)场景中,PHP虽常被视作Web层语言,但凭借其成熟的扩展机制、轻量级进程模型及丰富的串口/网络通信库支持,可构建高可靠、易维护的边缘数据网关。该网关…...

codex gpt-5.4 日卡200刀

一、配置 auth.jsonapikey如下:sk-8UvPchGMHwu8E8h7uuzzpk9Zv70SI8SU5cNNSnyy8nnv5mLV二、配置 config.tomlmodel_provider "codexeasy" model "gpt-5.4" model_reasoning_effort "high" disable_response_storage true[model_pr…...

SDMatte Web前端性能优化:大图片上传与预览的流畅体验实现

SDMatte Web前端性能优化:大图片上传与预览的流畅体验实现 1. 引言:大图片处理的用户体验痛点 在图像处理类Web应用中,用户上传大尺寸图片时常常面临几个典型问题:上传速度慢、页面卡顿、预览效果差。以SDMatte这样的智能抠图工…...

Flutter应用安全保护:代码混淆的重要性与Android/iOS混淆步骤详解

前言 本文将会和大家说下保护代码的重要性,和如何给程序加上混淆编译功能。 尽可能的不要在你的程序中写死各种服务秘钥,比如 oss 容易被盗用。 参考 https://docs.flutter.dev/deployment/obfuscatehttps://www.guardsquare.com/blog/obstacles-in-…...

2026年正规的geo推广合作投放,究竟能带来怎样的营销新突破?

在2026年,营销领域正经历着前所未有的变革,随着AI技术的飞速发展,传统营销方式逐渐显露出局限性,而GEO推广合作投放作为一种新兴的营销手段,正逐渐成为企业关注的焦点。那么,正规的GEO推广合作投放究竟能为…...

tao-8k嵌入模型惊艳体验:Xinference WebUI界面操作,效果一目了然

tao-8k嵌入模型惊艳体验:Xinference WebUI界面操作,效果一目了然 1. tao-8k模型核心能力展示 tao-8k是由Hugging Face开发者amu研发的开源文本嵌入模型,专注于将文本转换为高维向量表示。这款模型最引人注目的特点是支持长达8192个token的上…...

智能货架供应商哪家强?2026年综合实力深度评测

“智能货架用得好是效率引擎,用不好就是钢铁牢笼。”这是我在仓储物流行业摸爬滚打15年来最深的体会。当你的企业决定引入智能货架系统(穿梭车货架、自动化立体库货架)时,最核心的疑问只有一个:到底哪家供应商靠谱&…...

Pixel Fashion Atelier惊艳效果展示:512x768竖版高精度皮装图集

Pixel Fashion Atelier惊艳效果展示:512x768竖版高精度皮装图集 1. 像素艺术与时尚的完美融合 Pixel Fashion Atelier(像素时装锻造坊)将复古游戏美学与现代时尚设计相结合,创造出了独特的视觉体验。这款基于Stable Diffusion与…...

达摩院春联AI实战落地:中小企业春节营销内容智能生产方案

达摩院春联AI实战落地:中小企业春节营销内容智能生产方案 1. 引言:当春节营销遇上AI 春节,是中国人最重要的节日,也是商家营销的黄金时段。对于中小企业来说,如何在这个节点高效、低成本地创作出有年味、有创意的营销…...

PD诱骗取电芯片XSP28Q应用简介

PD快充是近几年非常流行的一种USB快充标准协议,主要使用USB Type-C接口作为传输途径。目前主流的快充协议主要是PD协议、QC协议、AFC协议、SCP协议、VOOC等。所有的快充协议有分为供电端和受电端(或者说取电端、用电端等),一般我们…...

DeepSeek-R1-Distill-Llama-8B在智能家居中的语音交互方案

DeepSeek-R1-Distill-Llama-8B在智能家居中的语音交互方案 1. 引言 智能家居正在改变我们的生活方式,但传统的语音助手常常让人感到"不够智能"——它们要么听不懂复杂的指令,要么无法理解上下文,要么反应迟钝。想象一下这样的场景…...