关于list和vector的一点点试验
在我的游戏中存在一个Actor_t的类
他的实例是一个角色,角色维护它自己的任务(Active_t)数组
我选择list(链表)作为动态数组,因为考虑到经常要删除任务
所以list快一些。
角色update时候需要找到这里已经执行完成的任务,并移出数组
所以我们要遍历数组 删除元素。
但因为list是强迭代器,就是在更改数组时候迭代器仍然有效
vector是弱迭代器,在更改数组时候,迭代器会失效
其实说白了 list是链表 vector是数组 而已
在这里写两个数组,删除数组里的偶数,看看两种容器的区别
- vector 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;}
复制代码 |
- list 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 m; m.insert(pair(1,1)); m.insert(pair(1,2)); m.insert(pair(1,3)); m.insert(pair(1,4)); m.insert(pair(1,5)); m.insert(pair(1,6)); m.insert(pair(1,7)); m.insert(pair(1,8)); multimap::_Pairii it; multimap::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; }
复制代码 |
|