介绍

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 学习笔记六)的更多相关文章

  1. 数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法

    前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是 ...

  2. 数据结构与算法之美学习笔记:B+树(第48讲)

    一.解决问题的前提是定义清楚问题 通过对一些模糊需求进行假设,来限定要解决问题的范围 根据某个值查找数据,比如 select * from use where id=1234: 根据区间值来查询某些数 ...

  3. 数据结构(java版)学习笔记(序章)

    程序=数据结构+算法 序章做一个简单的思维导图,方便理解数据结构这门课的大纲,接下来我们将是按照线性表,栈,队列,串,树和图的顺序依次往下学.

  4. 数据结构(java版)学习笔记(一)——线性表

    一.线性表的定义 线性表是n(n>=0)个具有相同特性的数据元素的有限序列. 线性表是最简单.最常用的一种数据结构 线性表属于线性结构的一种 如果一个数据元素序列满足: (1)除第一个和最后一个 ...

  5. Java基础学习笔记(六) - 数据结构和集合

    一.认识数据结构 1.数据结构有什么用? 合理的使用数据结构,可以更方便的查找存储数据. 2.常见的数据结构 数据存储常用结构有:栈.队列.数组.链表和红黑树. 栈:堆栈(stack),它是运算受限的 ...

  6. 【数据结构与算法Python版学习笔记】引言

    学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...

  7. 【数据结构与算法Python版学习笔记】目录索引

    引言 算法分析 基本数据结构 概览 栈 stack 队列 Queue 双端队列 Deque 列表 List,链表实现 递归(Recursion) 定义及应用:分形树.谢尔宾斯基三角.汉诺塔.迷宫 优化 ...

  8. 【数据结构与算法Python版学习笔记】查找与排序——散列、散列函数、区块链

    散列 Hasing 前言 如果数据项之间是按照大小排好序的话,就可以利用二分查找来降低算法复杂度. 现在我们进一步来构造一个新的数据结构, 能使得查找算法的复杂度降到O(1), 这种概念称为" ...

  9. 【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现

    无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ...

随机推荐

  1. Spark学习之RDD编程(2)

    Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...

  2. 【转】jvm收集器

    HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...

  3. jq封装插件

    $.extend()拓展方法: $(function(){ $.extend({ money:function(){ alert("我要努力赚钱") }, money:functi ...

  4. CodeFrist基础

    Code First(代码先行).它思想就是先定义模型中的类,再通过这些类生成数据库.这种开发模式适合于全新的项目,它使得我们可以以代码为核心进行设计而不是先构造数据库. EF中创建数据库的表必须要有 ...

  5. kdump机制和crash常见使用

    kdump简介 kdump是系统崩溃的时候,用来转储运行内存的一个工具. 系统一旦崩溃,内核就没法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核, 该内核会将此时内存中的所有运行 ...

  6. [不断更新中] 各种错误&&总结

    各种错误 无论感觉多稳都要对拍对拍对拍!!! 不要爆long long 不要爆long long 不要爆long long 不要爆long long 不要爆long long 不要爆long long ...

  7. 面试:B

    协程 材质和贴图 任意模块的深入理解

  8. 3.3.3 char 类型

        char类型原本用于表示单个字符.不过,现在情况已经有所变化.如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个 char 值.       char类 ...

  9. vue.js组件之间通讯--父组件调用子组件的一些方法,子组件暴露一些方法,让父组件调用

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 【UOJ34】高精度乘法(FFT)

    题意: 思路:FFT模板,自带10倍常数 type cp=record x,y:double; end; arr=..]of cp; var a,b,cur:arr; n,m,n1,n2,i,j:lo ...