cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
来源:互联网 发布:linux 安装 tomcat 编辑:程序博客网 时间:2024/05/16 15:18
介绍
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<Sprite*>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<Sprite*>::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());
0 0
- cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
- cocos2d-x-3.1 常用宏 (coco2d-x 学习笔记五)
- cocos2d-x-3.1 NotificationCenter (coco2d-x 学习笔记八)
- cocos2d-x或coco2d学习之杂谈
- coco2d-x学习笔记
- cocos2d-x-3.1 win32程序-初识源码(coco2d-x 学习笔记二)
- cocos2d-x-3.1 vs 输出Log的几种方法 (coco2d-x 学习笔记三)
- cocos2d-x-3.1 国际化strings.xml解决乱码问题 (coco2d-x 学习笔记四)
- cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
- cocos2d-x-3.1 文本输入框简单使用 (coco2d-x 学习笔记九)
- coco2d-x 学习笔记2
- cocos2d-x学习笔记(1)--coco2d-x引擎下载及环境搭建
- cocos2d-x-3.0 Windos 新建项目(coco2d-x 学习笔记一)
- cocos2d-x+cocosbuilder 学习笔记 (六)
- cocos2d-x 3.x学习之Vector常用函数
- Coco2d-x Framebuffer笔记
- coco2d-x学习之程序入口
- coco2d-x学习之程序启动流程
- 03_面向对象(一)
- lcd参数理解
- hdu 1698
- leetcode:Unique Binary Search Trees
- 设计模式之模板方法模式(Template Method)摘录
- cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
- oracle中删除表后会有残留,Oracle中清除BIN$开头的垃圾表
- 两个类相互包含引用的问题
- UnixC——进程间通信(IPC)
- QSS的应用
- leetcode:Binary Tree Inorder Traversal
- brand and entreprium
- MySQL数据同步
- 关于学习一种应用程序开发框架——谈编程的学习