Febix of MegaGames Team
1/25/2016 - 10:02 AM

Everything about array usage.

Everything about array usage.


vector vs deque

Контейнеры vector и deque очень схожи по описанию. Тем не менее, разница между ними есть и весьма существенная. Кроме того, что к deque можно добавлять элементы в начало, он отличается от vector размещением в памяти. vector всегда будет размещаться в памяти последовательно. Благодаря этому он может очень удачно прикидываться простым массивом. И у него есть специфичные функции для работы с этой самой памятью. Из-за последовательного размещения в памяти произвольный доступ к элементам очень быстрый.
А вот deque может быть запросто в памяти сегментирован. Обычно он реализуется как массив массивов. Поэтому доступ к элементам будет помедленнее. Но зато при добавлении элементов не будет возникать тех проблем, что имеют место у vector с выделением последовательных кусков памяти.

Если сравнивать deque с list, то deque занимает меньше памяти чем list. Ну и с произвольным доступом к элементам у list все похуже. Зато list быстрее справляется с удалением и добавлением элементов в произвольное место списка.
std::vector <Vec2 *> _Positions;

Cocos Upgrade Deprecated classes: 
http://www.redtgames.com/blog/cocos2d-x-v2-to-v3-mapping-guide/

std::vector C++
https://code-live.ru/post/cpp-vector/

Производительность контейнеров:
https://habrahabr.ru/post/138550/

Vec2 is not inherited class of cocos2d::Node. Hence, can not be Vectorize using cocos2d::Vector.

Vec2 is struct type and you are meant to use std::Vector from #include <vector>.

Code Example (as given by microslop) :

 std::vector <cocos2d::Vec2> _Positions;

Other Samples:

std::vector<cocos2d::Vec2> a;
std::vector<cocos2d::Vec2>::const_iterator i;
a.push_back(1);
for(i=a.begin(); i!=a.end(); ++i){
  cocos2d::log("%f %f",(*i).x,(*i).y);
}

// returns true if the two vectors are equal
Vector<Sprite*> vec2(*vec0);
if (vec0->equals(vec2)) { ... }

// whether the Vector is empty
if(!vec1.empty()) { ... }

// shrinks the vector so the memory footprint corresponds with the number of items
vec1.shrinkToFit();

// checks whether an object is in the container. 
vec1.contains(sprite0);

// returns the number of elements in the Vector
vec1.size()

// the size of the currently allocated storage capacity in the Vector, measured in terms of the number elements it can hold.
// this capacity is not necessarily equal to the Vector size. It can be equal or greater, with the extra space allowing to accommodate for growth without the need to reallocate on each insertion. 
vec1.capacity()
for (auto bullet: this->_bullets)
{
    if (bullet->getPositionX() > 160)
    {
        //  ...
    }
}
// add an object
auto sprite1 = Sprite::create();
this->vec1.pushBack(sprite1);

// insert a certain object at a certain index
auto sprite1 = Sprite::create();
vec1.insert(0, sprite1);

// we can also add a whole vector
vec1.pushBack(*vec0);

// remove the element from the Vector
this->vec1.eraseObject(bullet);
//vec1.erase(vec1.find(sp0));
//pVec1->erase(1);
//pVec1->eraseObject(sp0,true);
//pVec1->popBack();

// remove all elements
vec1.clear();
// declare and Init Array
Vector<Touch *> _touches;

// Attention!!! : Vector can hold pointers that is Ref or subclass of Ref (e.g.:Node) only, 
// so for example Vector< Node* > is valid, 
// but not Vector< int > or Vector< Node >, otherwise it will fail to compile.

[Blog](http://dev.bunnyhero.org/2014/01/cocos2d-x-30-beta-the-new-vector-class/)

[Wiki](http://www.cocos2d-x.org/wiki/Vector%3CT%3E)

Vector<Sprite *> allSoldiers;

// initialize a vector with a capacity
Vector<Sprite *>  vec1(5);


HelloWorld::HelloWorld() : _bullets(100)
{
}
// or

this->_bullets = cocos2d::Vector<cocos2d::Sprite *>{100};