转 Vector的使用

简介:

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


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


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

先创建两个精灵:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  • auto sp1 = Sprite::create("CloseNormal.png");  

  • sp1->setPosition(Point(100,100));  

  • this->addChild(sp1,1);  

  •   

  • auto sp2 = Sprite::create("CloseSelected.png");  

  • sp2->setPosition(Point(100,200));  

  • this->addChild(sp2,1);  


   创建容器

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  • Alpha:  

  •     auto sp_array = Array::create();  

  • beta:  

  •     Vector<Sprite*> sp_vec;  


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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  • Alpha:  

  •     sp_array->addObject(sp1);  

  •     sp_array->addObject(sp2);  

  •   

  •   

  • beta:  

  •     sp_vec.pushBack(sp1);//和 堆栈 一样一样的  

  •     sp_vec.pushBack(sp2);  


3、获得容器中的大小

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  • Alpha:  

  •     int count = sp_array->count();  

  • beta:  

  •     int count = sp_vec.size();  


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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  • Alpha:  

  •     for(int i=0;i<sp_array->count();i++)  

  •     {  

  •         auto sp = (Sprite*)sp_array->getObjectAtIndex(i);  

  •         sp->runAction(MoveTo::create(0.2f,Point(100,100)));  

  •     }  

  • beta:  

  •     for( auto& e : sp_vec)

  •     {

  •         e->runAction(MoveTo::create(0.2f,Point(100,100)));//这种for写法是C++ 11的新特性

  •     }


5、删除容器中的精灵

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  • //如果是要删除容器中最后一个精灵的话:  

  • Alpha:  

  •     sp_array->removeLastObject();  

  • beta:  

  •     sp_vec.popBack();  

  •       

  • //如果是直接删除对象:  

  • Alpha:  

  •     sp_array->removeObject(sp1);  

  • beta:  

  •     sp_vec.eraseObject(sp1);  

  • //如果是要删除容器中全部的对象:  

  • Alpha:  

  •     sp_array->removeAllObject();  

  • beta:  

  •     sp_vec.clear();  


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

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片

  • //a 在容器中的任何一个位置插入对象:  

  • sp_vec.pushBack(sp1);  

  • sp_vec.pushBack(sp2);  

  • //目前的情况是,sp1在容器的第一个位置,sp2在容器的第二个位置,这时候我们要将sp3放入第一个位置:  

  • sp_vec.insert(0,sp3);//ok  

  •   

  • //b 查找容器中的对象:  

  • //1、假设不知道容器中是否有sp3这个精灵,这时候可以这样:  

  • sp_vec.contains(sp3);//如果有,返回true,无返回false;  

  • //2、已知容器中有sp3这个精灵,想获得它在容器中的位置:  

  • int pos_int = sp_vec.find(sp3);  

  • //上面的方法可以获得sp3的位置,但返回的其实是迭代器的地址,你得到的结果可能是45214等等,如果想获得正常需要的位置,可以这样:  

  • int pos_int = sp_vec.find(sp3) - sp_vec.begin();//ok  


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


目录
相关文章
|
6月前
|
存储 算法 测试技术
C++:Vector的使用
C++:Vector的使用
|
6月前
|
存储 编译器 C语言
vector讲解
vector讲解
73 0
|
6月前
|
编译器 C++
【c++】vector
【c++】vector
44 0
|
28天前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
25 0
|
1月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
3月前
|
安全 Java
Vector的使用
Vector的使用
18 2
|
4月前
|
存储 C语言 C++
【C++】vector的使用上
**C++ STL的vector简介与用法:** Vector是动态顺序数组,提供高效下标访问,支持动态增长。与数组类似但可自动调整大小。常用构造函数包括默认、填充、迭代器范围和拷贝构造。析构函数自动释放内存。赋值运算符执行深拷贝。迭代器接口包括`begin()`和`end()`(反向对应`rbegin()`和`rend()`),C++11增加了const版本以支持只读访问。示例代码展示了不同构造函数和迭代器的使用。
|
4月前
|
编译器 C++
【C++】vector的使用下
**C++ 中的 `std::vector` 概要:** - **元素获取:** 支持 `operator[]`(越界时不检
|
5月前
|
存储 索引 容器
vector
【6月更文挑战第17天】
53 0
|
11月前
|
编译器 C++
c++ vector的使用
vector 的初始化
60 0