Cocos2dx 3.0 过渡篇(八)浅谈容器Vector

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:14px; line-height:26px"> 尊重原创,转载请注明来自:star特530的CSDN博客 <a target="_blank" href="http://blog.csdn.net/start530/article/details/19170853"

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853

前两天有人问我说在3.0 beta2版本里,使用array 后编译出错,其实是因为自beta版本开始,已没有Array,取而代之的是容器:Vector 和 Map


先说Vector吧。
如果说C++的vector容器怎么用,如果我说太多肯定一下子就暴露了我菜鸟的身份。所以呢,在这里不过多阐述,也请大神绕路。
所以,还是回到Vector的使用问题上吧。该怎么用?既然Vector是替代了Array,那就拿Array 和Vector进行对比吧。


下面我就以创建 Sprite 精灵对象的容器为例介绍吧
1、创建

先创建两个精灵:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto sp1 = Sprite::create("CloseNormal.png");  
  2. sp1->setPosition(Point(100,100));  
  3. this->addChild(sp1,1);  
  4.   
  5. auto sp2 = Sprite::create("CloseSelected.png");  
  6. sp2->setPosition(Point(100,200));  
  7. this->addChild(sp2,1);  

    创建容器

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Alpha:  
  2.     auto sp_array = Array::create();  
  3. beta:  
  4.     Vector<Sprite*> sp_vec;  

2、将创建好的精灵添加进容器中

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Alpha:  
  2.     sp_array->addObject(sp1);  
  3.     sp_array->addObject(sp2);  
  4.   
  5.   
  6. beta:  
  7.     sp_vec.pushBack(sp1);//和 堆栈 一样一样的  
  8.     sp_vec.pushBack(sp2);  

3、获得容器中的大小

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Alpha:  
  2.     int count = sp_array->count();  
  3. beta:  
  4.     int count = sp_vec.size();  

4、获得容器中的精灵,并让这些元素都做统一的动作

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. Alpha:  
  2.     for(int i=0;i<sp_array->count();i++)  
  3.     {  
  4.         auto sp = (Sprite*)sp_array->getObjectAtIndex(i);  
  5.         sp->runAction(MoveTo::create(0.2f,Point(100,100)));  
  6.     }  
  7. beta:  
  8.     for( auto& e : sp_vec)
  9.     {
  10.         e->runAction(MoveTo::create(0.2f,Point(100,100)));//这种for写法是C++ 11的新特性
  11.     }

5、删除容器中的精灵

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //如果是要删除容器中最后一个精灵的话:  
  2. Alpha:  
  3.     sp_array->removeLastObject();  
  4. beta:  
  5.     sp_vec.popBack();  
  6.       
  7. //如果是直接删除对象:  
  8. Alpha:  
  9.     sp_array->removeObject(sp1);  
  10. beta:  
  11.     sp_vec.eraseObject(sp1);  
  12. //如果是要删除容器中全部的对象:  
  13. Alpha:  
  14.     sp_array->removeAllObject();  
  15. beta:  
  16.     sp_vec.clear();  

6、其他
”说破不值钱“,其实Vector也就那样啦,恩,那样...最后补充一些其他的用法:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //a 在容器中的任何一个位置插入对象:  
  2. sp_vec.pushBack(sp1);  
  3. sp_vec.pushBack(sp2);  
  4. //目前的情况是,sp1在容器的第一个位置,sp2在容器的第二个位置,这时候我们要将sp3放入第一个位置:  
  5. sp_vec.insert(0,sp3);//ok  
  6.   
  7. //b 查找容器中的对象:  
  8. //1、假设不知道容器中是否有sp3这个精灵,这时候可以这样:  
  9. sp_vec.contains(sp3);//如果有,返回true,无返回false;  
  10. //2、已知容器中有sp3这个精灵,想获得它在容器中的位置:  
  11. int pos_int = sp_vec.find(sp3);  
  12. //上面的方法可以获得sp3的位置,但返回的其实是迭代器的地址,你得到的结果可能是45214等等,如果想获得正常需要的位置,可以这样:  
  13. int pos_int = sp_vec.find(sp3) - sp_vec.begin();//ok  

恩,时间不多,先写到这吧。昨晚才去了解beta里的Vector,如果有什么写错的地方或者用的不恰当的地方,敬请告知...


转载请声明原创地址:http://blog.csdn.net/start530?viewmode=contents

相关文章
|
4月前
|
存储 C++ 容器
如何将没有复制或移动构造函数的对象放入vector容器
如何将没有复制或移动构造函数的对象放入vector容器
42 0
|
6月前
|
存储 算法 编译器
8.STL中Vector容器的常见操作(附习题)
8.STL中Vector容器的常见操作(附习题)
|
6月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
|
6月前
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
72 5
|
6月前
|
存储 算法 C++
【C++/STL】:vector容器的基本使用
【C++/STL】:vector容器的基本使用
42 1
|
5月前
|
存储 安全 C++
|
5月前
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
6月前
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
269 0
|
6月前
|
算法 编译器 Linux
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
【C++/STL】:vector容器的底层剖析&&迭代器失效&&隐藏的浅拷贝
51 0
|
6月前
|
存储 缓存 C++
Vector容器介绍
Vector容器介绍