游戏开发之C++Vector动态数组及其迭代器的实现–简单版(C++基础)

1.数据结构及其实现如下:

#include <iostream>
#include <functional>typedef void* PVOID;
class CPPVector
{private:PVOID *_pArr;//记录数据的地址int _len;//当前动态数组长度int _lenMax;//动态数据临时最大长度
public://初始化动态数组CPPVector(){_len = -1;_lenMax = 10;_pArr = new PVOID[_lenMax];}//释放动态数组~CPPVector(){delete[] _pArr;}//在尾部插入数据void push_back(PVOID const value){//扩容if (_len + 1 == _lenMax){_lenMax *= 5;PVOID* p = new PVOID[_lenMax];memcpy(p, _pArr, sizeof(PVOID)*(_len + 1));delete[] _pArr;_pArr = p;}_pArr[++_len] = value;}//删除数据void remove(const int index){if (index > _len || index < 0 || _len != -1)return;_pArr[index] = _pArr[_len--];}//更新数据void update(const int index, PVOID const data){if (index > _len || index < 0 || _len != -1)return;_pArr[index] = data;}//迭代器:用于遍历非公开的数据成员。//且迭代器内不保证数据是否越界,越界问题的考虑只能靠使用迭代器的程序员。class iterator{friend class CPPVector;//友元类private:PVOID *_pArr;//记录动态数组头int _index;//当前迭代器的位置public:iterator(){_pArr = NULL;//数据位置_index = 0;//当前数据的索引}iterator(PVOID *pArr_, int index_){_pArr = pArr_;//数据位置_index = index_;//当前数据的索引}//!=运算符重载bool operator!=(const iterator& iter) const{return _index != iter._index ? 1 : 0;}//前置++运算符重载iterator& operator++(){_index++;return *this;}//++运算符重载iterator operator++(int){iterator iter(_pArr, _index);_index++;return iter;}//访问当前位置的数据成员实体//*运算符重载PVOID operator*() const{return _pArr[_index];}//获取当前迭代器位置int GetIndex(){return _index;}};//返回第一个元素的位置iterator begin(){return iterator(_pArr, 0);}//返回最后一个元素的下一个位置iterator end(){return iterator(_pArr, _len + 1);}//返回下一个迭代器的位置同时删除当前节点数据const iterator& erase(const iterator& iter){memcpy(_pArr + iter._index, _pArr + iter._index + 1, sizeof(PVOID)*(_len--));return iter;}//根据数据信息,获取在动态数组的位置信息。int findValue(PVOID const pv, iterator& iter, const std::function <bool(PVOID, PVOID)> const func){for (int i = 0; i < _len + 1; i++){if (func(_pArr[i], pv) == 1){iter._pArr = _pArr;iter._index = i;return 1;}}return 0;}//将动态数组里面的数据进行排序,从小到大void sort(std::function<bool(PVOID, PVOID)> func){for (int i = 0; i < _len; i++){for (int j = 0; j < _len - i - 1; j++){if (func(_pArr[j], _pArr[j + 1])){void * temp = _pArr[j];_pArr[j] = _pArr[j + 1];_pArr[j + 1] = temp;}}}}
};

2.测试

int main()
{CPPVector v;int num[10] = { 10,19,5,1,60,20,8,9,11,100 };for (int i = 0; i < 10; i++)v.push_back(num + i);v.erase(v.begin());v.erase(v.begin());v.erase(v.begin());v.erase(v.begin());v.erase(v.begin());v.remove(2);//匿名函数auto func = [](PVOID p1, PVOID p2)->bool{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 value = 100;CPPVector::iterator index;v.findValue(&value, index, func);std::cout << "位置:" << index.GetIndex() << std::endl;v.sort(funcSort);CPPVector::iterator iterBegin = v.begin();CPPVector::iterator iterEnd = v.end();//迭代器失效//声明迭代器之后,如再次修改数据,迭代器会失效//因为迭代器根据vector中的当前数据长度返还数据信息,再次修改数据以声明的迭代器并没有实时更新//int temp = 12;//v.push_back(&temp);for (; iterBegin != iterEnd; iterBegin++)std::cout << *(int*)(*iterBegin) << std::endl;return 0;
}

游戏开发之C++Vector动态数组及其迭代器的实现--简单版(C++基础)相关推荐

  1. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  2. [整理]Unity3D游戏开发之Lua

    原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...

  3. DirectX游戏开发之2D文字的实现

    DirectX游戏开发之2D文字的实现 文字是承载信息最有效的载体之一,各种游戏程序都离不开文字的显示.对于3D文字来说,2D文字有其渲染的高效性和实现的简洁性. 2D文字的显示无论在写2D游戏还是在 ...

  4. 游戏开发之U3D插件EasyTouch5.x使用

               游戏开发之U3D插件EasyTouch5.x使用 本篇只讲EasyTouch5.x的使用,不讲源码.本来想把EasyTouch5.x的使用手册翻译一遍,想来也是没那个时间. 第一 ...

  5. 微信小游戏开发之CocosCreator多分辨率场景适配方案

    主题 Cocos Creator不同手机分辨率的背景图像和场景内容适配 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文 ...

  6. libGDX游戏开发之Box2D(十四)

    libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...

  7. 开发中的“软”与“硬”:高画质移动游戏开发之道

    摘要:游戏的效果不仅与游戏引擎的渲染相关,与硬件优化也有千丝万缕的联系.一款基于芯片优化的移动游戏界面,甚至可以堪比视频游戏的视觉效果.高通半导体事业部资深经理刘晓光从软硬件两个层面分享了移动游戏开发 ...

  8. 游戏开发之U3D实现技能图标冷却的效果

    游戏开发之U3D实现技能图标冷却的效果 --本次使用的NGUI插件.     制作思路:NGUI插件里面有个UISprite组件,在它上面有个属性叫Type,改变相应的Type类型有不同的作用,本次使 ...

  9. C++ vector动态数组

    C++ vector动态数组 Vector投入是面向对象方式的动态数组 使用vector容器,可以轻松实现数组插入元素,vector可以轻松实现动态管理扩容 创建动态数组vector vector&l ...

  10. JAVA游戏开发之FPS精准控制

    目录 JAVA游戏开发之FPS精准控制... 1 1       概述... 2 1.1        编写目的... 3 2       FPS精准控制... 3 2.1        FPS描述. ...

最新文章

  1. YOLOV4知识点分析(二)
  2. 青源 LIVE 预告 | 华为诺亚韩凯:视觉 Transformer 综述
  3. 机器人过程自动化的10个秘密
  4. javascript必知必会之prototype
  5. [watevrCTF 2019]Repyc [NPUCTF2020]BasicASM
  6. 抽象类和接口有什么区别?
  7. Vue中前端加密使用RSA加密下的JSEncrypt防止明文暴露
  8. modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程
  9. composer 依赖包版本冲突_composer快速入门教程
  10. 单源最短路径算法---Dijkstra
  11. IntelliJ IDEA 2014 付费版 免费版比较
  12. 从service启动activity startActivity慢 的解决方案
  13. 展开和收起动画(jQuery)
  14. 软考,难吗?公务员考试呢?
  15. 2017年上半年软件设计师试题-04
  16. mysql主键和聚簇索引_MYSQL:聚簇索引和主键索引
  17. 学习笔记 Logistic阻滞人口预测模型
  18. git基于某个分支新建分支
  19. Docker深入浅出系列
  20. 遥控小车之:HTML5+ 虚拟摇杆

热门文章

  1. 如何不出国门走进NLP学术前沿
  2. python——画伪彩图、设置彩色图例
  3. 机器学习算法基础4-K-近邻算法、朴素贝叶斯算法、分类模型评估、模型的选择与调优
  4. 白板推导系列Pytorch-隐马尔可夫模型-学习问题
  5. 博文视点读书节第七日丨IT大咖来荐书,CS提升分享今晚开播,晒单赢福袋活动上线!
  6. 游戏设计阻力探秘之扩展空间
  7. 《linux核心应用命令速查》连载十:ps:查看权限
  8. 无重复元素的组合算法/n个列表中取n个不同的数
  9. Scipy教程 - 线性代数库scipy.linalg
  10. Deep Learning中的Attention Mechanism介绍