cocos2d-x-3.1 数据结构之Vector (coco2d-x 学习笔记六)
介绍
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 学习笔记六)的更多相关文章
- 数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法
前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是 ...
- 数据结构与算法之美学习笔记:B+树(第48讲)
一.解决问题的前提是定义清楚问题 通过对一些模糊需求进行假设,来限定要解决问题的范围 根据某个值查找数据,比如 select * from use where id=1234: 根据区间值来查询某些数 ...
- 数据结构(java版)学习笔记(序章)
程序=数据结构+算法 序章做一个简单的思维导图,方便理解数据结构这门课的大纲,接下来我们将是按照线性表,栈,队列,串,树和图的顺序依次往下学.
- 数据结构(java版)学习笔记(一)——线性表
一.线性表的定义 线性表是n(n>=0)个具有相同特性的数据元素的有限序列. 线性表是最简单.最常用的一种数据结构 线性表属于线性结构的一种 如果一个数据元素序列满足: (1)除第一个和最后一个 ...
- Java基础学习笔记(六) - 数据结构和集合
一.认识数据结构 1.数据结构有什么用? 合理的使用数据结构,可以更方便的查找存储数据. 2.常见的数据结构 数据存储常用结构有:栈.队列.数组.链表和红黑树. 栈:堆栈(stack),它是运算受限的 ...
- 【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
- 【数据结构与算法Python版学习笔记】目录索引
引言 算法分析 基本数据结构 概览 栈 stack 队列 Queue 双端队列 Deque 列表 List,链表实现 递归(Recursion) 定义及应用:分形树.谢尔宾斯基三角.汉诺塔.迷宫 优化 ...
- 【数据结构与算法Python版学习笔记】查找与排序——散列、散列函数、区块链
散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为" ...
- 【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现
无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ...
随机推荐
- Python之数据聚合与分组运算
Python之数据聚合与分组运算 1. 关系型数据库方便对数据进行连接.过滤.转换和聚合. 2. Hadley Wickham创建了用于表示分组运算术语"split-apply-combin ...
- PLC学习资料
常用字母 X 输入点(I)可连接外部输入信号 如感应器或限位/按钮等M 内部辅助继电器S 内部步进 不作步进使用时,可用作内部辅助继电器T 时间继电器 内部使用C计数器 内部使用Y输出点(O)输出给外 ...
- MyBatis 之一 简介
什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
- 常用Linux命令(长期更新)
有些命令如果不常用,老是记不住,每每用到总还要去查,特此将一些命令记录在此: (0)按指定时间删除文件 find target_dir -type f -mtime +3 -exec rm {} \; ...
- MySql学习笔记(三) —— 聚集函数的使用
1.AVG() 求平均数 select avg(prod_price) as avg_price from products; --返回商品价格的平均值 ; --返回生产商id为1003的商品价格平均 ...
- VMware 12虚拟机下Ubuntu 16连不上网解决方法
打开自带Firefox浏览器,显示连接不上网,终端下 ping 也显示 unkown 解决方法: 1.打开虚拟机的“编辑”选项,选择“虚拟网络编辑器” 2.选择VMnet8(我不知道为啥VMnet ...
- phpExcel导出excel打不开问题
用wps和office都打不开,使用旧版的office打开了 出现了一些 warming警告,虽然warming不影响函数的执行,但是php导出excel文件,是header出来的.这个warning ...
- 25款css动画库
http://www.swiper.com.cn/usage/animate/index.html //swiper https://cssanimation.io/ http://ianlunn ...
- [Algorithm] 9. Two Sum
Description Given an array of integers, return indices of the two numbers such that they add up to a ...
- 00 大王警语--be_a_new_gentleman
大王博客:https://www.cnblogs.com/alex3714/ # 表面层次# 1,着装特体(服饰的牌子中高端)# 2,每天洗澡# 3,适当用香水# 4,女士优先# 5,不随地吐痰.不乱 ...