关于list和vector的一点点试验
在我的游戏中存在一个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; }
|

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; }
|