游戏开发之使用类封装动态数组(vector)(C++基础)

使用类初始化列表、引用、常引用、拷贝构造(深拷贝)、匿名回调函数等知识实现。

#include <iostream>
#include <functional>//避免二义性,便于阅读理解
typedef void* PVOID;//动态数组
class Vector
{private:PVOID *_pArr;int _nLen;int _nLenMax;
public:Vector(int Len):_nLen(0),_nLenMax(Len){_pArr = (void**)new PVOID[_nLenMax];}~Vector() { delete[]_pArr; }Vector(const Vector& vector_){_nLen = vector_._nLen;_nLenMax = vector_._nLenMax;_pArr = (void**)new PVOID[_nLenMax];memcpy(_pArr, vector_._pArr, sizeof(void*)*(vector_._nLenMax));}//插入数据int VectorInsert(void * const data){if (_nLen + 1 == _nLenMax){_nLenMax *= 5;void **temp = (void**) new void*[_nLenMax];memcpy(temp, _pArr, sizeof(void*)*(_nLenMax / 5));delete[]_pArr;_pArr = temp;temp = NULL;}_pArr[_nLen++] = data;return 1;}//删除数据int VectorDelete(const int index){if (index > _nLen || index < 0)return 0;_pArr[index] = _pArr[--_nLen];return 1;}//更新数据int VectorUpdate(const int index, void * const data){if (index > _nLen || index < 0)return 0;_pArr[index] = data;return 1;}//获取数据对应的指定下标,匿名函数及本函数均为查询成功返回1,查询失败返回0int VectorFindValue(void* const pV, int *const pIndex, const std::function<int(void*, void*)> const func){for (int i = 0; i < _nLen; i++){if (func(_pArr[i], pV) == 1){*pIndex = i;return 1;}}return 0;}//将动态数组里面的数据进行排序,从小到大void VectorSort(std::function<int(void*, void*)> func){for (int i = 0; i < _nLen; i++){for (int j = 0; j < _nLen - i - 1; j++){if (func(_pArr[j], _pArr[j + 1])){void * temp = _pArr[j];_pArr[j] = _pArr[j + 1];_pArr[j + 1] = temp;}}}}//打印数据,匿名函数形参依次传入每个节点的地址void VectorpPrint(const std::function<void(void*)> const func){for (int i = 0; i < _nLen; i++)func(_pArr[i]);std::cout << std::endl;}
};int main()
{Vector vector(100);int num[10] = { 10,19,5,1,60,20,8,9,11,100 };for (int i = 0; i < 10; i++)vector.VectorInsert(num + i);auto fPrint = [](void *p1){printf("%5d", *(int*)p1);};vector.VectorpPrint(fPrint);std::function<int(void *, void*)> func = [](void *p1, void *p2)->int{return *(int*)p1 == *(int*)p2 ? 1 : 0;};std::function<int(void*, void*)> funcSort = [](void* p1, void* p2)->int{return *(int*)p1 > *(int*)p2 ? 1 : 0;};int data = 10;int value;vector.VectorFindValue(&data, &value, func);vector.VectorDelete(2);vector.VectorpPrint(fPrint);vector.VectorSort(funcSort);vector.VectorpPrint(fPrint);return 0;
}

游戏开发之使用类封装动态数组(vector)(C++基础)相关推荐

  1. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组 PHP程序设计语言中的数组如何创建,一维数组的引用,PHP数组变量,foreach语句,如何对数组进行排序等等知识都是贵阳网站建设中的主 ...

  2. 蓝桥杯 笔记整理【JavaB组省赛真题、约数、全排列模板、排列组合、等差等比求和公式、eclipse快捷键、集合、快速求a^n、进制转换(Integer、BigInteger)、动态数组Vector】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  3. HDU ACM 1181 变形课 (广搜BFS + 动态数组vector)-------第一次使用动态数组vector

    http://acm.hdu.edu.cn/showproblem.php?pid=1181 题意:给我若干个单词,若单词A的结尾与单词B的开头相同,则表示A能变成B,判断能不能从b开头变成m结尾. ...

  4. 动态数组vector的使用_简单代码示例

    简单代码示例 //动态数组vector的使用 #include <iostream> #include <vector> //用 <vector>头文件 using ...

  5. 封装动态数组类Array

    功能: 1.增.删.改.查 2.扩容.缩容 3.复杂度分析 4.均摊复杂度 5.复杂度震荡 分析动态数组的时间复杂度: 分析resize的时间复杂度: public class Array<E& ...

  6. Java游戏开发——飞行射击类游戏

    使用到的素材文件夹: 素材说明:bg0.jpg是背景图片.bomb_enemy是敌机爆炸时按顺序播放的四帧图片,bullet_0.png是子弹图片,enemy_alive.png是敌机图片,playe ...

  7. java入门之 ArrayList类(动态数组)

    目录 (一).ArrayList类的声明 1.扩容 2.获得指定下标的元素 3.替换指定下标处的元素 4.为指定下标处添加指定元素 (二).具体使用步骤 1.导包 2.初始化 3.添加元素 4.删除元 ...

  8. C++动态数组vector实现

    最近在做将MATLAB代码转化为C/C++的工作,在实际应用时,发现动态数组非常重要,我在学习的时候也踩了许多坑,这篇就当做一篇踩坑笔记,希望读者能够绕开我踩过的坑,顺利应用动态数组. 1.静态数组. ...

  9. SDL农场游戏开发 4.Crop类,作物的产生及成长

    首先,先创建一个Entity类.该类的内部有一个精灵对象及相关操作来专门负责显示,以后需要显示的类都可继承自Entity类.比如Crop类的父类就是Entity. 问:为什么Soil类不继承自Enti ...

  10. SDL农场游戏开发 3.StaticData类

    前面说过,StaticData类负责管理程序在运行过程中不会发生变化的数据,如下为Resources目录结构: data文件夹保存着一些静态数据,比如crops.csv文件保存着作物信息,soils. ...

最新文章

  1. Java基本数据之间的类型转换
  2. 重新标注128万张ImageNet图片:多标签,全面提升模型性能
  3. O027、看nova-scheduler如何选择计算节点
  4. 玩转Mixly – 7、Arduino AVR编程 之 数组
  5. Flex Basis与Width的区别
  6. pip清华源安装Tensorflow-gpu
  7. 腾讯225页报告:AI正取代互联网成为新引擎,马化腾提七大关键词
  8. 转帖一篇关于DELPHI调试的文章-AQTime
  9. 批量获取ip运营商_通信公司员工收钱开通IP多拨被用于诈骗,6人获刑
  10. ajax修改属性后如何遍历,Ajax遍历jSon后对每一条数据进行相应的修改和删除(代码分享)...
  11. Python中ndarray数组切片问题a[-n -x:-y]
  12. 将GitHub源代码打包成jar包
  13. 英特尔傲腾持久内存 Optane DC Persistent Memory Module
  14. 计算机硬盘能影响速度吗,BitLocker对电脑硬盘性能的影响
  15. 7.0 站在生物学的角度看TypeScript类的继承
  16. 2021年2月28日【Jiawei_Z】Ethercat的整个实现过程(举例:Lan9252)
  17. CVPR2021——SurFree:一个快速的无代替模型的黑盒攻击
  18. 失业培训计算机试题,2017年职称计算机考试考前练习试题(11)
  19. 后端线上服务监控与报警方案
  20. matlab simulink 参数设置,matlab simulink 中 gateway 参数设置

热门文章

  1. 基于特定实体的文本情感分类总结(PART II)
  2. ICML2018对抗生成网络论文评述
  3. 云计算解码:技术架构和产业运营
  4. Linux学习笔记(五):less|more的命令使用
  5. C语言断言assert详解
  6. multisim安装后无法连接数据库_Kepserver连接Mysql教程(一)MySQL5.5数据库安装
  7. Ros基本概念及小乌龟程序学习
  8. mysql怎么进行删除操作_利用PHP怎么对MySQL数据库进行删除操作
  9. 蓝桥杯2015年第六届C/C++省赛A组第七题-手链样式
  10. Kotlin 的优点