cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
2014-06-15 15:55
465 查看
介绍
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=1 obj=2 obj=3 obj=4 ===================== pushBack分割线 ====================== obj=2 obj=1 obj=2 obj=3 obj=4 ===================== insert分割线 ====================== obj=2 obj=1 obj=2 obj=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());
相关文章推荐
- cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
- cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
- cocos2d-x-3.1 经常使用宏 (coco2d-x 学习笔记五)
- cocos2d-x-3.1 NotificationCenter (coco2d-x 学习笔记八)
- cocos2d-x-3.1 国际化strings.xml解决乱码问题 (coco2d-x 学习笔记四)
- cocos2d-x-3.1 国际化strings.xml解决乱码问题 (coco2d-x 学习笔记四)
- cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
- cocos2d-x-3.1 NotificationCenter (coco2d-x 学习笔记八)
- cocos2d-x-3.1 常用宏 (coco2d-x 学习笔记五)
- cocos2d-x-3.1 vs 输出Log的几种方法 (coco2d-x 学习笔记三)
- cocos2d-x-3.1 win32程序-初识源码(coco2d-x 学习笔记二)
- cocos2d-x-3.1 文本输入框简单使用 (coco2d-x 学习笔记九)
- cocos2d-x学习笔记(1)--coco2d-x引擎下载及环境搭建
- cocos2d-x 中的数据结构集合(容器)(CCArray,Map,Vector)使用笔记
- [Quick-Cococs2DX] Quick-Cocos2D-X学习 (二) Quick-Cocos2d-X 核心framework 目录结构与功能介绍
- Cocoa2d-X学习笔记第三篇:基础数据结构
- 【Cocos2d-x 3.0学习笔记】coco2d-s 读取plist 文件报错
- cocos2d-x-3.0 Windos 新建项目(coco2d-x 学习笔记一)
- 学习笔记之cocos2d-x2.1.1实现修改plist文件数据,用TinyXml解析XML
- [Cococs2d]Cocos2d-X结构关系