• [Cocos2d-x v3.x]浅谈容器Vector


    转载请注明来自: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、创建

    先创建两个精灵:

    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 plaincopy在CODE上查看代码片派生到我的代码片
    1. Alpha:  
    2.     auto sp_array = Array::create();  
    3. beta:  
    4.     Vector<Sprite*> sp_vec;  

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

    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、获得容器中的大小

    1. Alpha:  
    2.     int count = sp_array->count();  
    3. beta:  
    4.     int count = sp_vec.size();  

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

    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、删除容器中的精灵

    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也就那样啦,恩,那样...最后补充一些其它的使用方法:

    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  
  • 相关阅读:
    介绍 Jersey 依赖
    Jersey 2.x 分支 Java SE 兼容性
    Confluence 6 管理 Atlassian 提供的 App
    Confluence 6 针对站点维护使用只读模式
    Confluence 6 协同编辑问题解决
    Confluence 6 管理协同编辑
    Confluence 6 管理协同编辑
    Confluence 6 管理协同编辑
    Confluence 6 管理协同编辑
    Confluence 6 管理协同编辑
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4377140.html
Copyright © 2020-2023  润新知