扩展CArray类,增加Contain函数

CArray不包含查找类的函数,使用不便。考虑扩展CArray类,增加Contain函数,通过回调函数暴露数组元素的比较方法,由外部定义。该方法相对重载数组元素的“==”符号更加灵活,可以根据需要配置不同的回调函数进行比较

//类型定义template<class TYPE, class ARG_TYPE = const TYPE&>
class CArrayEx  : public CArray<TYPE,ARG_TYPE>
{public:typedef BOOL (CALLBACK *ContainCallBack)(TYPE& T1,TYPE& T2) ; //定义带回调的函数指针,返回类型为BOOLtypedef ContainCallBack FunContainCallBack;BOOL Contain(FunContainCallBack func,TYPE& T1){BOOL bRes = FALSE;for (int i=0;i<this->GetSize();i++){TYPE item = this->GetAt(i);if (TRUE == (bRes = func(item,T1)))  break;}return bRes;}};//---------------测试用类
typedef  struct struTestItem
{int v1,v2;struTestItem(){};struTestItem(const struTestItem& src){CpyData(src);}struTestItem& struTestItem::operator = (const struTestItem& src)  { if(this == &src)return *this;CpyData(src);return *this; }void CpyData(const struTestItem& src){v1 = src.v1;v2 = src.v2;}bool operator==(const struTestItem& other)const  {return v1 == other.v1;  //默认的比较方法,比较v1}} TestItem;typedef CArrayEx<TestItem,TestItem&> ArrayTestItem;//定义比较函数,专类专用!!!
//--------------定义2个比较方法,采用不同的逻辑-------
template<class TYPE>
BOOL CALLBACK MyContainsFunc_UseDefault(TYPE& v,TYPE& v2)
{return v ==  v2;
}template<class TYPE>
BOOL CALLBACK MyContainsFunc_ByUseV2(TYPE& v,TYPE& v2)  //使用v2作为比较方法
{//读取成员变量的方法要根据传入的数据类型修改,不能照搬!!TestItem *pV1 = (TestItem*)&v;TestItem *pV2 = (TestItem*)&v2;return pV1->v2 == pV2->v2;}

测试代码

        ArrayTestItem arrTst;TestItem it1,it2,it3;it1.v1=1;it1.v2=2;it2.v1=3;it2.v2=4;it3.v1=5;it3.v2=2;arrTst.Add(it1);arrTst.Add(it2);//使用MyContainsFunc_UseDefault比较_tprintf(_T("it1 exists %d\n"),arrTst.Contain(MyContainsFunc_UseDefault,it1));_tprintf(_T("it3 exists %d\n"),arrTst.Contain(MyContainsFunc_UseDefault,it3));//使用MyContainsFunc_ByUseV2比较_tprintf(_T("it3 exists %d\n"),arrTst.Contain(MyContainsFunc_ByUseV2,it3));

输出结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/734061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言————字符函数与字符串函数

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数&#xff0c;如追加&#xff0c;拷贝&#xff0c;替换等等接下来我们就学习⼀下这些函数&#xff0c;并且自实现。 gets 这个指令大家…

十七、enumerate函数的用法

enumerate() 函数是 Python 内置函数之一&#xff0c;用于同时返回可迭代对象的索引和对应的值。 它的语法结构如下&#xff1a; enumerate(iterable, start0) iterable: 表示一个可迭代的对象&#xff0c;如列表、元组、字符串等。start: 可选参数&#xff0c;表示索引起始…

校招春招秋招,HR是如何筛选简历的?

一份简历在HR的眼中最多能停留15秒钟。 如果15秒内HR没有决定要通知你做在线测评&#xff0c;那么这事就算过去了。 那么问题来了&#xff0c;如果在15秒内&#xff0c;让HR对你产生兴趣&#xff1f; 1、简历布局 人在浏览信息的时候&#xff0c;习惯性的是从上往下&…

The display: inline property prevents width from having an effect.

The display: inline property prevents width from having an effect. Try setting display to something other than inline. ---------------------------------- display: inline 不支持元素的 width 或 height 属性&#xff0c;若要元素 width 或 height 生效&#xff0c;…

全网上线 IP 归属地功能,一文教你如何实现

细心的朋友们可能已经发现了&#xff0c;先在抖音、知乎、快手、小红书等这些平台已经上线了“网络用户显示 IP 的功能”&#xff0c;境外用户显示的是国家&#xff0c;国内的用户显示的省份&#xff0c;而且此项显示无法关闭&#xff0c;归属地强制显示。 1获取用户 IP 地址 …

LLM 推理优化探微 (2) :Transformer 模型 KV 缓存技术详解

编者按&#xff1a;随着 LLM 赋能越来越多需要实时决策和响应的应用场景&#xff0c;以及用户体验不佳、成本过高、资源受限等问题的出现&#xff0c;大模型高效推理已成为一个重要的研究课题。为此&#xff0c;Baihai IDP 推出 Pierre Lienhart 的系列文章&#xff0c;从多个维…

企业如何安全参与开源项目?

【开源三句半】 企业参与开源潮&#xff0c; 安全创新都重要&#xff0c; 持续投入不可少&#xff0c; 眼光独到。 开源已经成为构建现代软件的常见方式&#xff0c;这不仅局限于IT技术本身&#xff0c;更推动了多个行业的数字化发展。企业决定引入开源项目打造商业软件时&…

简介:基于 OpenTiny 组件库的 rendereless 无渲染组件架构

在 HAE 自研阶段&#xff0c;我们实现的数据双向绑定、面向对象的 JS 库、配置式开发的注册表等特性&#xff0c;随着前端技术的高速发展现在已经失去存在的意义&#xff0c;但是在 AUI 阶段探索的新思路新架构&#xff0c;经过大量的业务落地验证&#xff0c;再次推动前端领域…

mmap匿名映射区

在创建映射区时&#xff0c;我们创建了一个文件&#xff0c;后面又需要unlink删除&#xff0c;然后munmap释放内存映射区&#xff0c;所以一开始就没必要创建。匿名映射区是指创建的映射区域不与任何文件关联&#xff0c;而是由操作系统分配的匿名内存。 mmap 内存映射里所谓的…

启发式算法:模拟退火算法

文章目录 退火的含义算法概述Metroplis准则算例-旅行商TSP问题退火的含义 退火(annealing)现象指物体逐渐降温的物理现象,温度愈低,物体的能量状态会低;够低之后,液体开始冷凝与结晶,在结晶状态时,系统的能量状态最低。大自然在缓慢降温(亦即,退火)时,可“找到”最…

空间复杂度的OJ练习——轮转数组

旋转数组OJ链接&#xff1a;https://leetcode-cn.com/problems/rotate-array/ 题目&#xff1a; 思路&#xff1a; 通过题目我们可以知道这是一个无序数组&#xff0c;只需要将数组中的数按给定条件重新排列&#xff0c;因此我们可以想到以下几种方法&#xff1a; 1.暴力求解法…

C语言字符数组的输入与输出的详细说明

前记&#xff1a;由于c面向过程编程语言&#xff0c;不像C和java等面向对象的编程语言&#xff0c;没有string类。 只能凭借数组存储字符串。接下来是关于c语言的字符数组的输入输出的详细说明&#xff01; 一&#xff0c;输入函数 1.scanf() scanf这种格式串不能接收带空格的字…

HTML 学习笔记(一)开始

一、介绍: 首先引用百度百科的一段话作为介绍:   HTML的全称为超文本标记语言&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…

Qt QPainter的使用方法

重点&#xff1a; 1.QPainter在QWidget窗口的paintEvent中使用。 2.QPainter通常涉及到设置画笔、设置画刷、绘图&#xff08;QPen、QBrush、drawxx&#xff09;三个流程。 class Widget : public QWidget {Q_OBJECTprotected:void paintEvent(QPaintEvent *event) Q_DEC…

React组件(函数式组件,类式组件)

函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!-- 引…

seo蜘蛛池的概念!蚂蚁SEO

蜘蛛池是一种特殊的网络营销技术&#xff0c;它的主要作用是吸引搜索引擎爬虫&#xff0c;提高网站的收录和排名&#xff0c;从而增加网站的流量和曝光度。 蚂蚁SEO是一个SEO工具&#xff0c;可以帮助您提高网站权重&#xff0c;吸引更多的搜索引擎爬虫&#xff0c;提高网站的…

6. Gin集成redis

文章目录 一&#xff1a;连接Redis二&#xff1a;基本使用三&#xff1a;字符串四&#xff1a;列表五&#xff1a;哈希六&#xff1a;Set七&#xff1a;管道八、事务九&#xff1a;示例 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/14-go-redi…

Linux多线程之线程控制

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、pthread_crate 二、pthread_join 三、p…

腾讯面经学习笔记

&#x1f496; 前言 &#x1f469;‍&#x1f3eb; 参考地址 &#x1f496; 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间&#xff08;程序上下文&#xff09;&#…

使用大型语言模型进行实体提取

原文地址&#xff1a;Using A Large Language Model For Entity Extraction LLM 能否比传统 NLP 方法更好地提取实体&#xff1f; 2022 年 7 月 12 日 Large Language Models for Generative Information Extraction: A Survey 实体简介 使用Co:here大型语言模型。 实体可以被视…