|
在我的游戏中存在一个Actor_t的类
他的实例是一个角色,角色维护它自己的任务(Active_t)数组
我选择list(链表)作为动态数组,因为考虑到经常要删除任务
所以list快一些。
角色update时候需要找到这里已经执行完成的任务,并移出数组
所以我们要遍历数组 删除元素。
但因为list是强迭代器,就是在更改数组时候迭代器仍然有效
vector是弱迭代器,在更改数组时候,迭代器会失效
其实说白了 list是链表 vector是数组 而已
在这里写两个数组,删除数组里的偶数,看看两种容器的区别
- vector<int> l;
- l.push_back(1);
- l.push_back(2);
- l.push_back(3);
- l.push_back(4);
- l.push_back(5);
- l.push_back(6);
- l.push_back(7);
- l.push_back(8);
- vector< int >::iterator it;
- for(it=l.begin();it!=l.end();++it)
- {
- while(*it%2==0)
- {
- l.erase(it);
- if(it==l.end())
- break;
- }
-
- if(it==l.end())
- break;
- }
复制代码
[em16] [em16] [em16] [em16] [em16]
- list<int> l;
- l.push_back(1);
- l.push_back(2);
- l.push_back(3);
- l.push_back(4);
- l.push_back(5);
- l.push_back(6);
- l.push_back(7);
- l.push_back(8);
-
- list< int >::iterator it,it2;
- for(it=l.begin();it!=l.end();++it)
- {
- for(it2=it;*it%1==0;it2=it)
- {
- it++;
- l.erase(it2);
- if(it==l.end())
- break;
- }
-
- if(it==l.end())
- break;
- }
复制代码
最后试验了一下multimap,在同一个key下可以和list一样处理(可能就是
list实现的吧),但是不敢试验所有的key,因为如果是红黑树实现的话
删除了一个key可能树会改变,迭代器具体指哪里?
- multimap<int, int> m;
- m.insert(pair<int,int>(1,1));
- m.insert(pair<int,int>(1,2));
- m.insert(pair<int,int>(1,3));
- m.insert(pair<int,int>(1,4));
- m.insert(pair<int,int>(1,5));
- m.insert(pair<int,int>(1,6));
- m.insert(pair<int,int>(1,7));
- m.insert(pair<int,int>(1,8));
- multimap<int,int>::_Pairii it;
- multimap<int,int>::iterator it2;
- it=m.equal_range(1);
- for(;it.first!=it.second;++it.first)
- {
- for(it2=it.first;it.first->second%2==0;it2=it.first)
- {
- it.first++;
-
- m.erase(it2);
- if(it.first==it.second)
- break;
-
- }
- if(it.first==it.second)
- break;
- }
复制代码 |
|