vector



cocos2d-x 3.0开发笔记---Vector<T>深入学习

cocos2d x 3.0后 官方建议用Vector<T>来代替CCArray,因为他们在std::vector<T>的基础上进行了封装,使用起来更方便,不用去管内存释放问题,由编译器来负责管理内存。

但是T必须是继承了cocos2d的对象的指针,不允许是其他类型,因为会把cocos2d的内存管理模式转换成vector的内存管理模式。

原文在此 : http://www.cocos2d-x.org/docs/manual/framework/native/data-structure/v3/vector/en

1.官方例子

先看看官方给出的使用例子:

//创建一个Sprite对象sp1
auto sp1 = Sprite::create();
sp1->setTag(1);

//初始化vec1  容量为5  T继承自Sprite
Vector<Sprite*>  vec1(5);
//在vec1中插入sp1 位置是0
vec1.insert(0, sp1);

//也可以直接放到末尾
vec1.pushBack(*vec0);
//遍历vec1中的元素
for(auto sp : vec1)
{
  log("sprite tag = %d", sp->getTag());
}

Vector<Sprite*> vec2(*vec0);
if (vec0->equals(vec2)) { //两个vector进行比较 返回一个bool值
  log("pVec0 is equal to pVec2");
}
if (!vec1.empty()) {  //判断vec1是否为空
  //vec1.capacity()表示vector的容量 vec1.size()表示的里面有多少个元素
  if (vec1.capacity() == vec1.size()) {
    log("pVec1->capacity()==pVec1->size()");
  }else{
    vec1.shrinkToFit();   //根据vector中的元素个数对其进行压缩
    log("pVec1->capacity()==%zd; pVec1->size()==%zd",vec1.capacity(),vec1.size());
  }
  //pVec1->swap(0, 1);  //根据序号 交换index0和index1的值
vec1.swap(vec1.front(), vec1.back());  //交换 第一个 和最后一个元素的值
  if (vec2.contains(sp0)) {  //判断vec2是否包含sp0 返回一个bool值
    log("The index of sp0 in pVec2 is %zd",vec2.getIndex(sp0));
  }
  //从vec1中移除元素  vec1.find(sp0)从vec1中查找sp0的iterator 范围是(first,last) 如果找到 返回最先找到的哪个 如果没有找到返回last元素
  vec1.erase(vec1.find(sp0));
  //pVec1->erase(1); 通过序列移除
  //pVec1->eraseObject(sp0,true); true表示移除查找到的所有sp0对象 false:只移除找到的第一个sp0
  //pVec1->popBack();移除最后一个元素

  vec1.clear(); //remove all elements 移除vec1中的所有元素
  log("The size of pVec1 is %zd",vec1.size());
}

2.CCVector详解

1.声明

Vector <class*> classVector; class继承自cocos2d类


2.方法或属性

void reserve(ssize_t n)   // 重设容量(capacity)

ssize_t capacity() const //返回当前容量 (capacity)

ssize_t size() const //返回元素个数

bool empty() const//判断是否为空

ssize_t max_size() const//返回vector能管理的最大元素个数

 ssize_t getIndex(T object) const//返回object的index值,如果不存在,返回-1

 const_iterator find(T object) const//查找对象object,返回一个iterator(迭代器),或者返回last元素

iterator find(T object)//同上

T at(ssize_t index) const//根据index 返回元素  类似T[index] 但cocos封装的Vector中 不能使用T[index]这种方法

T front() const//返回首个元素

T getRandomObject() const//获取随机元素

bool contains(T object) const//判断是否包含obj  返回一个bool值

bool equals(const Vector<T> &other)//判断2个Vector 是否相等

void pushBack(T object)//添加元素

void pushBack(const Vector<T>& other)//把vector中的所有元素添加进当前vector

void insert(ssize_t index, T object)//在index位置 插入object

void popBack()//移除最后一个元素

void eraseObject(T object, bool toRelease = true)//移除元素object    true表示移除最先找到的哪个  false表示移除所有object元素

iterator erase(iterator position)//根据iterator的位置移除元素

iterator erase(iterator first, iterator last)//移除(first,last)这个范围内的元素

iterator erase(ssize_t index)//通过index移除元素

void clear()//清除所有元素

void swap(T object1, T object2)//交换 o1 o2的值

void swap(ssize_t index1, ssize_t index2)//通过index 交换 o1 o2的值

 void replace(ssize_t index, T object)//用object 替换index位置的元素

void reverse()//存储 vector

 void shrinkToFit()//压缩vector
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值