[转帖]关于list和vector的一点点试验 

2006-12-12 12:01 发布

2499 0 0
关于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;
}

楼主新帖

TA的作品 TA的主页
B Color Smilies

你可能喜欢

[转帖]关于list和vector的一点点试验 
联系
我们
快速回复 返回顶部 返回列表