vector,CCArray等元删除满足条件元素的删除(比如删除大于2的元素)

来源:互联网 发布:云计算数据中心建设 编辑:程序博客网 时间:2024/05/22 07:57
1,正序删除#include<iostream>#include<vector>using namespace std;void main(){    vector<int> v;    v.push_back(1);    v.push_back(2);    v.push_back(3);    v.push_back(4);    v.push_back(5);        for(vector<int>::iterator iter = v.begin(); iter != v.end();)    {        if(*iter >= 2)        {            cout<<*iter<<endl;            iter = v.erase(iter);        }        else            iter++;    }    }/* 2 3 4 5 */

总结 :

当删除第1个元素后,iter指向原来的第2个元素,其实还是现在的第1个元素。也就是说,每次都删除第一个元素。

不删除的话,正常的++,从而指向下一个元素。

2,倒序删除

for(vector<int>::iterator iter = v.end() - 1; iter >= v.begin(); iter--){    if(*iter >= 2){        cout<<*iter<<endl;        iter = v.erase(iter);    }}/* 5 4 3 2 */

总结:

每次删除最后一个元素后,iter指向end,然后减去1,从而又指向最后一个元素。从而每次删除最后一个元素。

3,在CCArray中倒序删除元素。

如,rpg游戏中,移除血量小于0的敌人,就可以采用倒序删除的方法。

int SGFight::refreshArr(){for(int i = arrHero->count() - 1; i >= 0; i--){if(((SGRole*)arrHero->objectAtIndex(i))->getCurHp() <= 0){arrHero->removeObjectAtIndex(i);if(arrHero->count() == 0){return FIGHT_ENEMY_WIN;}}}for(int i = arrEnemy->count() - 1; i >= 0; i--){if(((SGRole*)arrEnemy->objectAtIndex(i))->getCurHp() <= 0){arrEnemy->removeObjectAtIndex(i);if(arrEnemy->count() == 0){return FIGHT_HERO_WIN;}}}return FIGHT_NORMAL;}

总结:

i指向最后一个元素的索引 ,删除后,i不变。然后减去1,从而依然指向最后1个元素。

 

0 0
原创粉丝点击