cocos2d::Vector最佳用法

cocos2d::Vector,下面是官方提供的示例用法:

//create Vector with default size and add a sprite into it
auto sp0 = Sprite::create();
sp0->setTag(0);
//here we use shared_ptr just as a demo. in your code, please use stack object instead
std::shared_ptr>  vec0 = std::make_shared>();  //default constructor
vec0->pushBack(sp0);
 
//create a Vector with a capacity of 5 and add a sprite into it
auto sp1 = Sprite::create();
sp1->setTag(1);
 
//initialize a vector with a capacity
Vector  vec1(5);
//insert a certain object at a certain index
vec1.insert(0, sp1);
 
//we can also add a whole vector
vec1.pushBack(*vec0);
 
for(auto sp : vec1)
{
    log("sprite tag = %d", sp->getTag());
}
 
Vector vec2(*vec0);
if (vec0->equals(vec2)) { //returns true if the two vectors are equal
    log("pVec0 is equal to pVec2");
}
if (!vec1.empty()) {  //whether the Vector is empty
    //get the capacity and size of the Vector, noted that the capacity is not necessarily equal to the vector size.
    if (vec1.capacity() == vec1.size()) {
        log("pVec1->capacity()==pVec1->size()");
    }else{
        vec1.shrinkToFit();   //shrinks the vector so the memory footprint corresponds with the number of items
        log("pVec1->capacity()==%zd; pVec1->size()==%zd",vec1.capacity(),vec1.size());
    }
    //pVec1->swap(0, 1);  //swap two elements in Vector by their index
    vec1.swap(vec1.front(), vec1.back());  //swap two elements in Vector by their value
    if (vec2.contains(sp0)) {  //returns a Boolean value that indicates whether object is present in vector
        log("The index of sp0 in pVec2 is %zd",vec2.getIndex(sp0));
    }
    //remove the element from the Vector
    vec1.erase(vec1.find(sp0));
    //pVec1->erase(1);
    //pVec1->eraseObject(sp0,true);
    //pVec1->popBack();
 
    vec1.clear(); //remove all elements
    log("The size of pVec1 is %zd",vec1.size());
}

cocos2d::Vector最佳用法
1.优先考虑用栈生成的Vector,而不是堆。栈生成的性能更好。

2.把Vector做为参数传递时,如果不需要改变它,常把它作为const Vector&,一般对象不需要修改都这么做,可以参考《Effective C++》条款03。

3.返回值是Vector时,直接返回,C++11特性移动对象,编译器将其优化操作,而不是以前的拷贝。不熟悉的靴童可以参考下《C++ Primer 5th》的第十三章的对象移动。

4.Vector,里面的元素必须是继续coco2d::Object。


你可能感兴趣的:(C/C++,Cocos2D-X)