Cocos2d-x Vector——vector iterators incompatible

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************

使用 cocos2d-x 中的 Vector的时候,

在删除某个对象的时候出现了个错误,很崩溃啊.....

Vector<Bullet*>* bullets;

// 遍历每个bullet,让他们自己更新
for ( auto it = bullets->begin();it!=bullets->end();it++)
{
  (*it)->update();

  // 获取子弹生命,若子弹已经消亡,释放
  if( (*it)->getLife() )	{

    Bubblet* b = *it;

    bubblets->eraseObject(b);
    this->removeChild( b,true );
  }

}

就会发生错误——vector iterators incompatible;

或许是我 打开的方式不对,于是用C++11方法:

Vector<Bullet*> bullets;

for( auto& b : bullets )  {
  b->update();

  if( b->getLife() )  {
    bubblets.eraseObject(b);
    this->removeChild(b,true);
  }

}

还是不行。。。

找了很久,发现,

据说是因为,迭代器遍历的时候,如果把当前的给删除了,那么后面就乱套了,无法继续进行下去了,

所以,会崩溃。

于是乎,如果通过迭代器来遍历,就这么改:

// 遍历每个bullet,让他们自己更新
for ( auto it = bullets->begin();it!=bullets->end();)
{
  (*it)->update();

  // 获取子弹生命,若子弹已经消亡,释放
  if( (*it)->getLife() )	{

    Bubblet* b = *it;

    it = bubblets->eraseObject(b);
    this->removeChild( b,true );
  }
  else  {
    it++;
  }

}

迭代器的移动,不再靠循环,而是靠判断语句。

可惜,通过C++11方法的遍历,我还没想到要怎么改。。。

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-04 07:43:06

Cocos2d-x Vector——vector iterators incompatible的相关文章

vector iterators incompatible

字面翻译迭代器类型不兼容 今天同事遇到的这个问题算是一个习惯性写法的问题.描述一下代码: struct Track{}; class BaseTrack { - std::vector<Track> GetTrackSourceList(); - }; 问题所在: void func(BaseTrack bt) std::vector<Track>::iterator it = bt.GetTrackSourceList().begin(); for(; it != bt.GetT

关于list iterators incompatible/vector iterators incompatible 报错总结

STL有三大核心部分:容器(Container).算法(Algorithms).迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有STL其他标准组件,如果你使用容器不当,就会发生list  iterators  incompatible/vector iterators  incompatible 的错误,报错如图: 如果你trace代码,你可以看到如下代码: bool operator==(const _Myiter& _Ri

(原)使用vectot的.end()报错:iterators incompatible

转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5070672.html 参考网址: http://blog.csdn.net/yxnyxnyxnyxnyxn/article/details/17610899 之前用vector一直没有问题,前几天遍历时, for (auto it = var.sta.begin(); it != var.sta.end();) 运行时直接报:iterators incompatible 网上搜了一下,很多是说使用e

对多维向量vector&lt;vector&lt;int&gt; &gt; vec进行操作

直接写作vector<vector<int> > vec在VC++6.0下编译不过改做:    typedef std::vector<int> ROW;    std::vector<ROW> vec;    vec[0][0] = 0;     vec[0][1] = 1; #include <iostream>#include <vector>using namespace std;int main(){     vector&

vector&lt; vector&lt;int&gt; &gt;类似于二维数组

1 vector< vector<int> > intVV; 2 vector<int> intV; 3 int i,j; 4 for(i=0;i<10;++i){ 5 intV.clear(); 6 for(j=0;j<10;++j) 7 intV.push_back(i*10+j); 8 intVV.push_back(intV); 9 } 10 11 for(i=0;i<10;++i){ 12 for(j=0;j<10;++j) 13 co

由jtable浅谈vector&lt;vector&lt;Object&gt;&gt;的用法(转自a718515028的专栏)

以前只用过vector<Object>  ,但是在做从数据库导出数据放到jtable中时,发现还有个vector<vector<Object>>的用法. 先说jtable和DefaultTableModel jtable本身是可以显示一张列表,但是不能按钮监听的增加正行数据. jtable中没有addRow(Object[] rowData) 或者addRow(Vector rowData) ,方法. 但是jtable中有一个构造方法,JTable(TableModel

vector vector int 初始化

方法一: vector<vector<int>>array=(2,vector<int>()); array[0].push_back(1); array[i].push_back(2); 方法二: vector<vector<int> >array={{1,2},{3,,4}};

vector&lt;vector&lt;int&gt; &gt;二维容器编程

#include <iostream> #include <vector> using std::cout; using std::endl; using std::vector; template<typename T> void show(const vector<vector<T> > &ivvec); //输出vector<vector<int> >的内容 int main(void) {  vector&

vector&lt;vector&lt;int&gt;&gt;

/************************************************************************ Copyright (C) 2015-2020. File name: Author: Greenapple QQ: 361348440 EMail: [email protected] Version: V1.0 Date: 2015/3/15 Description: STL vector usage Others: 无 Modification