转 Vector的使用

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

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

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

先创建两个精灵:

[cpp] view plaincopy

  • 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

  • Alpha:  
  •     auto sp_array = Array::create();  
  • beta:  
  •     Vector<Sprite*> sp_vec;  

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

[cpp] view plaincopy

  • Alpha:  
  •     sp_array->addObject(sp1);  
  •     sp_array->addObject(sp2);  
  •   
  •   
  • beta:  
  •     sp_vec.pushBack(sp1);//和 堆栈 一样一样的  
  •     sp_vec.pushBack(sp2);  

3、获得容器中的大小

[cpp] view plaincopy

  • Alpha:  
  •     int count = sp_array->count();  
  • beta:  
  •     int count = sp_vec.size();  

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

[cpp] view plaincopy

  • 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

  • //如果是要删除容器中最后一个精灵的话:  
  • 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

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

时间: 2024-10-30 18:37:17

转 Vector的使用的相关文章

java对象群体的组织:向量Vector

向量的功能: 1.能存储任意对象 2.不能存储基本类型的数据,如39,除非将这些数据包裹在包裹类中 3.其容量可以按需求自动扩充 4.若果不用扩充容量,增加元素方法的效率较高 方式: Vector myVector=new Vector() //初始容量为10 Vector myVector=new Vector(int cap) // 初始容量为cap Vector myVector=new Vector(Collection col) //使用集合col的元素初始化,若果col为数组,需要先

c++-vector iterator not dereferencable怎么处理啊

问题描述 vector iterator not dereferencable怎么处理啊 求解,下面这段代码是可以运行的,不过我把处理的数据换成 (IP (NP (NP (NP (CP (IP (VP (VV ()(NP (NR 法新社)(NR 伦敦) (NT 一日) (NN 电) (NN )) (NN 火星) (NN 探测)))))(NP (NN 计划)))(NP (NN 发言人)))(NP (NR 巴拉特)))(VP (VV 说) (PU ,)(IP (IP (VP (VV 一枚)(IP (

c++-C++ vector部分拷贝的问题

问题描述 C++ vector部分拷贝的问题 比如我有一个自定义类型vectorvector vec;现在要把这个vec根据 vec.size()/2 分成前半部分和后半部分进行处理分别将这两部分存入 vector left 和 vector right请问除了一个个元素push_back之外,有什么好方法吗? 解决方案 http://bbs.csdn.net/topics/110093248 解决方案二: vector可以直接根据iterator设置起始结尾位置来进行复制 解决方案三: 当然是

初始化的一些问题(Vector使用)

import java.util.Vector; import java.util.Iterator; import java.util.Arrays; import java.util.ArrayList; public class VectorDemo{ public static void main(String args[]){ String names[]={"hfdsfng", "zhfcinyafdn"}; String namesp[]=new St

C++中vector使用

(1)vector< 类型 > 标识符 ;(2)vector< 类型 > 标识符(最大容量) :(3)vector< 类型 > 标识符(最大容量,初始所有值):(4) int i[4] = {12,3,4,5};    vector< 类型 > vi(i , i+2); //得到i索引值为3以后的值 :   (5)vector< vector >   //vi 定义2维的容器:记得一定要有空格,不然会报错 1. 在C++中的详细说明 vector

C++ vector用法

在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的. (5)使用迭代器访问元素. vector<int>::iterator it; for(it=vec.begi

Java中vector理解2——vector和arrayList的区别

这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制

Java的数组(Array)、Vector、ArrayList、HashMap的异同

数组   array(数组)和Vector是十分相似的Java构件(constructs),两者全然不同,在选择使用时应根据各自的功能来确定. 1.数组:Java arrays的元素个数不能下标越界,从很大程度上保证了Java程序的安全性,而其他一些语言出现这一问题时常导致灾难性的后果.        Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变.值得注意的是:当Array中的某一元素存放的是Objrct reference 时,Java不会调用默认的构

Java程序的性能优化StringBuffer与Vector

程序|性能|优化 ? Java使得复杂应用的开发变得相对简单.毫无疑问,它的这种易用性对Java的大范围流行功不可没.然而,这种易用性实际上是一把双刃剑.一个设计良好的Java程序,性能表现往往不如一个同样设计良好的C++程序.在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身.养成好的代码编写习惯非常重要,比如正确地.巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能.下面我们就来具体地分析一下这方面的问题.

Vector在Java编程中的应用

编程 Vector 类提供了实现可增长数组的功能,随着更多元素加入其中,数组变的更大.在删除一些元素之后,数组变小.Vector 有三个构造函数,public Vector(int initialCapacity,int capacityIncrement) public Vector(int initialCapacity) public Vector() Vector 运行时创建一个初始的存储容量initialCapacity,存储容量是以capacityIncrement 变量定义的增量增