博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
阅读量:6720 次
发布时间:2019-06-25

本文共 2036 字,大约阅读时间需要 6 分钟。

介绍

cocos2d::Vector<T>是一个封装好的能动态增长顺序訪问的容器。

 cocos2d::Vector<T>中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容器std::vector

在cocos2d-x v3.0 beta之前。使用的是另外一个顺序訪问容器cocos2d::CCArray。只是它将会被废弃。

设计者们将cocos2d::Vector<T>设计为cocos2d::CCArray的替代品,所以建议优先考虑使用cocos2d::Vector<T>。 cocos2d::Vector<T>的一些操作的时间复杂度例如以下:

  • 随机訪问。O(1)
  • 将元素插入到尾部或者删除尾部的元素。O(1)
  • 随机插入或删除, O(n)

模版參数

T - 元素类型

  • T的类型必须是继承自cocos2d::Object类型的指针。由于已经将cocos2d-x的内存管理模型集成到了cocos2d::Vector<T>中。所以类型參数不能是其它的类型包含基本类型。

内存管理

_data的内存管理是由编译器自己主动处理的,假设声明了一个cocos2d::Vector<T>类型。就不必费心去释放内存。

 注意:使用现代的c++,本地存储对象比堆存储对象好。

所以请不要用new操作来申请cocos2d::Vector<T>的堆对象。请使用栈对象。 假设真心想动态分配堆cocos2d::Vector<T>,请将原始指针用智能指针来覆盖。 警告:cocos2d::Vector<T>并非cocos2d::Object的子类,所以不要像使用其它cocos2d类一样来用retain/release和引用计数内存管理。

基本使用方法

Vector
mVector; Sprite* sp1 = Sprite::create(); sp1->setTag(1); Sprite* sp2 = Sprite::create(); sp2->setTag(2); Sprite* sp3 = Sprite::create(); sp3->setTag(3); Sprite* sp4 = Sprite::create(); sp4->setTag(4); mVector.pushBack(sp1); //pushBack操作将保留传递过来的參数 mVector.pushBack(sp2); mVector.pushBack(sp3); mVector.pushBack(sp4); for (Sprite* obj : mVector) { log("obj=%d", obj->getTag()); } log("===================== pushBack切割线 ======================"); mVector.insert(0, sp2); //insert插入数据下标从0開始 for (Sprite* obj : mVector) { log("obj=%d", obj->getTag()); } log("===================== insert切割线 ======================"); mVector.popBack(); //移除最后一个元素 for (Sprite* obj : mVector) { log("obj=%d", obj->getTag()); }
输出日志为:
obj=1obj=2obj=3obj=4=====================  pushBack切割线  ======================obj=2obj=1obj=2obj=3obj=4=====================  insert切割线   ======================obj=2obj=1obj=2obj=3

Sprite* sp0 = Sprite::create();	Vector
::iterator it = mVector.find(sp0); //std::find算法使用 if (it != mVector.end()){ log("find!"); } else{ log("not find!"); } mVector.reverse(); //顾名思义,逆转容器里面的元素 mVector.swap(0, 1); //交换其位置 for (Sprite* obj : mVector) { log("obj=%d", obj->getTag()); } log("size=%d", mVector.size()); mVector.clear(); log("size=%d", mVector.size());

转载地址:http://qvcmo.baihongyu.com/

你可能感兴趣的文章
【支持动态gif格式】基于java实现图像裁剪以及生成缩略图功能
查看>>
#工作笔记 Android 各类统计数据
查看>>
redis非授权访问的查毒过程
查看>>
eclipse maven excel 文件打包package后发生改变
查看>>
转载:GridFS 基于MongoDB的分布式文件存储系统
查看>>
常用必备开发工具(长期更新)
查看>>
jspf插件框架
查看>>
北岛 - 回答
查看>>
使用<link> 标签定义浏览器标题栏小图标
查看>>
无法向会话状态服务器发出会话状态请求 错误的解决方法
查看>>
spring接口注入异常Could not autowire
查看>>
springcloud微服务(一)
查看>>
OnTouchListener与OnGestureListener的区别
查看>>
Dubbo架构设计详解
查看>>
java替换字符串指定的字段
查看>>
SpringMVC Controller 介绍
查看>>
推荐一个实用的 .gitignore 文件
查看>>
两步实现Log4j记录java控制台输出的系统所有异常信息和自定义记录日志---->非常实用,强烈推荐阅读...
查看>>
数据归档
查看>>
smarty中如何遍历一维数组跟二维数组
查看>>