天天看点

转 Vector的使用

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

先说vector吧。

如果说c++的vector容器怎么用,如果我说太多肯定一下子就暴露了我菜鸟的身份。所以呢,在这里不过多阐述,也请大神绕路。

所以,还是回到vector的使用问题上吧。该怎么用?既然vector是替代了array,那就拿array 和vector进行对比吧。

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

1、创建

先创建两个精灵:

转 Vector的使用

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);  

   创建容器

转 Vector的使用

alpha:  

    auto sp_array = array::create();  

beta:  

    vector<sprite*> sp_vec;  

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

转 Vector的使用

alpha:  

    sp_array->addobject(sp1);  

    sp_array->addobject(sp2);  

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

    sp_vec.pushback(sp2);  

3、获得容器中的大小

转 Vector的使用

    int count = sp_array->count();  

    int count = sp_vec.size();  

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

转 Vector的使用

    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)));  

    }  

    for( auto& e : sp_vec)

    {

        e->runaction(moveto::create(0.2f,point(100,100)));//这种for写法是c++ 11的新特性

    }

5、删除容器中的精灵

转 Vector的使用

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

    sp_array->removelastobject();  

    sp_vec.popback();  

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

    sp_array->removeobject(sp1);  

    sp_vec.eraseobject(sp1);  

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

    sp_array->removeallobject();  

    sp_vec.clear();  

6、其他

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

转 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,如果有什么写错的地方或者用的不恰当的地方,敬请告知...

继续阅读