转载请注明来自: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、创建
先创建两个精灵:
-
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);
创建容器
-
Alpha:
-
auto sp_array = Array::create();
-
beta:
-
Vector<Sprite*> sp_vec;
2、将创建好的精灵加入进容器中
-
Alpha:
-
sp_array->addObject(sp1);
-
sp_array->addObject(sp2);
-
-
-
beta:
-
sp_vec.pushBack(sp1);
-
sp_vec.pushBack(sp2);
3、获得容器中的大小
-
Alpha:
-
int count = sp_array->count();
-
beta:
-
int count = sp_vec.size();
4、获得容器中的精灵,并让这些元素都做统一的动作
-
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、删除容器中的精灵
-
-
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也就那样啦,恩,那样...最后补充一些其它的使用方法:
-
-
sp_vec.pushBack(sp1);
-
sp_vec.pushBack(sp2);
-
-
sp_vec.insert(0,sp3);
-
-
-
-
sp_vec.contains(sp3);
-
-
int pos_int = sp_vec.find(sp3);
-
-
int pos_int = sp_vec.find(sp3) - sp_vec.begin();