先说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
(
int
i=
0
;i<sp_vec.size();i++)
{
auto sp = sp_vec.at(i);
sp->runAction(MoveTo::create(
0
.2f,Point(
100
,
100
)));
}
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也就那样啦,恩,那样...最后补充一些其他的用法:
//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,如果有什么写错的地方或者用的不恰当的地方,敬请告知...