游戏艺术工厂

首页 » 游戏制作交流 » 游戏程序 » [转帖]关于list和vector的一点点试验
暴米花 - 2006-12-12 12:01:00
关于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;
    }

1
查看完整版本: [转帖]关于list和vector的一点点试验