青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

勤能補(bǔ)拙,Expter

成都游戲Coder,記錄游戲開發(fā)過程的筆記和心得!

一個(gè)關(guān)于容器選取的刪除問題。


問題描述:
1個(gè)容器有大量元素,需要進(jìn)行erase大部分?jǐn)?shù)據(jù)的時(shí)候,需要遍歷這些元素,然后釋放item的空間,還要erase刪除其item。

一個(gè)庫,為了測試其性能的時(shí)候,需要保存所有外部使用者的數(shù)據(jù),這里選取了map,vector和list.

為了簡化問題,我寫了下面測試代碼來測試各個(gè)操作:
數(shù)據(jù)節(jié)點(diǎn):

struct node
{
    node(
int i){data = i;}
    
int data;
}

 1int _tmain(int argc, _TCHAR* argv[])
 2{
 3    typedef std::map<long,node*> Mptable;
 4    typedef std::vector<node*>   Vec;
 5    typedef std::list<node*>     List;
 6    
 7    Mptable        mapnode;
 8    Vec            vecnode;
 9    List        listnode;
10
11    for(int i = 1 ; i <= 100000 ; i++ )
12    {     
13        mapnode [ i ] = new node(i);
14        vecnode.push_back( new node(i) );
15        listnode.push_back( new node(i));
16    }

17
18    long time = timeGetTime( );
19    
20    for( Mptable::iterator itr = mapnode.begin() ; itr != mapnode.end() ;  )
21    {
22         delete itr->second;
23         mapnode.erase( itr++ );
24    }

25
26    std::cout <<"map : spend " << timeGetTime() - time << " msec " << std::endl;
27
28
29    time = timeGetTime( );
30    
31    for( Vec::iterator itr = vecnode.begin() ; itr != vecnode.end() ;  )
32    {
33         delete *itr;
34         itr = vecnode.erase( itr );
35    }

36
37    std::cout <<"vector : spend " << timeGetTime() - time << " msec " << std::endl;
38
39
40    time = timeGetTime( );
41    
42    for( List::iterator itr = listnode.begin() ; itr != listnode.end() ;  )
43    {
44         delete *itr;
45         itr = listnode.erase( itr );
46    }

47
48    std::cout <<"list : spend " << timeGetTime() - time << " msec" << std::endl;
49
50
51    return 0;
52}
Release下運(yùn)行結(jié)果:
map : spend 31 msec
vector : spend 3734 msec
list : spend 35 msec


發(fā)現(xiàn)map的速度最快,vector最慢,list相當(dāng)。

其實(shí)vector就是一個(gè)Array,只是Array是靜態(tài)大小,vector可以擴(kuò)展,然后查看vector的erase的源碼:
iterator erase(const_iterator _Where)
        
{    // erase element at where
        _Move(_VIPTR(_Where) + 1this->_Mylast,
            _VIPTR(_Where));
        _Destroy(
this->_Mylast - 1this->_Mylast);
        
--this->_Mylast;
        
return (_Make_iter(_Where));
        }
有一個(gè)move操作,原來把當(dāng)前iterator+1的往前移了,這樣的話會(huì)遍歷iterator后面所有的元素。


關(guān)于map的erase原理可以查看map的實(shí)現(xiàn)源碼:
由于map的erase后有一個(gè)維護(hù)過程,其實(shí)map是一個(gè)RB-Tree,刪除算法相對(duì)比較麻煩,刪除某個(gè)item會(huì)查找下一個(gè)item替換刪除的節(jié)點(diǎn),同時(shí)還要考慮紅和黑的節(jié)點(diǎn)處理。同時(shí)還要保證map的erase后,平衡且有序。
所以map的erase主要做:
1.刪除item.
2.讓樹平衡,且有序。

list其實(shí)是一個(gè)雙向鏈表:
關(guān)于刪除其實(shí)是0(1)的操作,我們查看list的erase的操作:
    iterator erase(const_iterator _Where)
        
{    // erase element at _Where
 #if _ITERATOR_DEBUG_LEVEL == 2
        
if (_Where._Getcont() != this || _Where._Ptr == this->_Myhead)
            _DEBUG_ERROR(
"list erase iterator outside range");
        _Nodeptr _Pnode 
= (_Where++)._Mynode();
        _Orphan_ptr(
*this, _Pnode);

 
#else /* _ITERATOR_DEBUG_LEVEL == 2 */
        _Nodeptr _Pnode 
= (_Where++)._Mynode();
 
#endif /* _ITERATOR_DEBUG_LEVEL == 2 */

        
if (_Pnode != this->_Myhead)
            
{    // not list head, safe to erase
            this->_Nextnode(this->_Prevnode(_Pnode)) =
                
this->_Nextnode(_Pnode);
            
this->_Prevnode(this->_Nextnode(_Pnode)) =
                
this->_Prevnode(_Pnode);

            _Dest_val(
this->_Alnod, _Pnode);
            
this->_Alnod.deallocate(_Pnode, 1);

            
--this->_Mysize;
            }

        
return (_Make_iter(_Where));
        }
主要代碼刪除就是下面刪除部分:
對(duì)prev和next節(jié)點(diǎn)進(jìn)行處理即可。

關(guān)于list的移除竟然比map還要慢.

PS:測試為單線程。

當(dāng)為100W數(shù)據(jù)的時(shí)候:
map : spend 300 msec
list :   spend 385 msec

咋list比map容器還要慢?
還是上面的代碼不能說明問題。

posted on 2011-01-14 14:58 expter 閱讀(2614) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 其他學(xué)習(xí)筆記工作筆記算法與數(shù)據(jù)結(jié)構(gòu)

評(píng)論

# re: 一個(gè)關(guān)于容器選取的刪除問題。 2011-01-17 18:42 小笨象

如果vector從最后一個(gè)開始刪除呢?
有沒有試過?  回復(fù)  更多評(píng)論   

# re: 一個(gè)關(guān)于容器選取的刪除問題。 2011-01-18 00:09 expter

@小笨象
你說那個(gè)確實(shí)可以提高效率。

只是不解禁用優(yōu)化后,list比map快,不禁用map缺比list快。。
  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            最新精品在线| 国产精品入口麻豆原神| 国产亚洲精品美女| 久久精品视频在线观看| 欧美一区二区三区日韩| 影音欧美亚洲| 亚洲电影免费观看高清完整版| 蜜桃av一区二区| 亚洲视频免费在线| 欧美一区2区视频在线观看| 尤物网精品视频| 亚洲美女av黄| 国内一区二区三区| 亚洲精品黄网在线观看| 国产精品午夜在线| 欧美激情一区二区三区高清视频| 国产精品99久久不卡二区| 午夜精品久久久久久99热软件| 在线不卡中文字幕播放| 日韩视频―中文字幕| 国产欧美一区二区在线观看| 欧美大胆a视频| 国产精品资源在线观看| 欧美承认网站| 国产欧美一区二区精品婷婷| 亚洲福利久久| 国产午夜精品久久久久久久| 亚洲国产天堂久久综合| 国产无一区二区| 亚洲久久视频| 亚洲福利在线观看| 亚洲欧美日韩国产成人| 一本色道久久综合亚洲精品高清 | 亚洲精品中文字幕有码专区| 亚洲图片自拍偷拍| 亚洲精品影视在线观看| 午夜久久久久久| 欧美成熟视频| 蜜臀av国产精品久久久久| 国产精品盗摄一区二区三区| 亚洲黄色影院| 亚洲第一福利社区| 久久久www成人免费无遮挡大片| 一区二区三区免费网站| 麻豆精品精华液| 久久嫩草精品久久久精品一 | 一本大道久久a久久综合婷婷| 伊人久久久大香线蕉综合直播| 一二三区精品福利视频| 日韩午夜在线播放| 久久手机精品视频| 久久综合影视| 国内激情久久| 久久国产精品一区二区三区四区| 亚洲欧美视频在线观看| 欧美视频不卡中文| 一区二区三区波多野结衣在线观看| 91久久久国产精品| 欧美α欧美αv大片| 免费不卡在线视频| 亚洲第一中文字幕在线观看| 久久精品综合网| 美女国内精品自产拍在线播放| 国产亚洲精品aa午夜观看| 欧美综合二区| 免费一级欧美在线大片| 亚洲丰满少妇videoshd| 美女成人午夜| 亚洲欧洲视频| 亚洲综合色噜噜狠狠| 国产精品毛片一区二区三区| 亚洲天堂成人在线视频| 欧美在线亚洲在线| 精品1区2区| 欧美黄色aaaa| 一区二区三区偷拍| 久久久久久九九九九| 在线观看一区| 亚洲欧美视频| 久久久精品五月天| 亚洲日本久久| 久久精品国产91精品亚洲| 久久尤物电影视频在线观看| 亚洲丶国产丶欧美一区二区三区 | 99精品视频免费在线观看| 亚洲自拍偷拍一区| 国产一区二区中文| 欧美国产日韩精品免费观看| 日韩视频免费观看| 久久九九久久九九| 99riav久久精品riav| 国产精品欧美风情| 另类国产ts人妖高潮视频| 有码中文亚洲精品| 欧美日本亚洲韩国国产| 校园激情久久| 亚洲精品视频啊美女在线直播| 欧美亚洲三区| 亚洲美女黄网| 国产一区欧美| 欧美日韩国产一区二区三区地区 | 先锋影音久久| 亚洲国产精品久久久久婷婷老年 | 欧美激情导航| 日韩亚洲成人av在线| 国产精品乱码久久久久久| 久久亚洲综合色一区二区三区| 一本久久综合亚洲鲁鲁| 免费一区二区三区| 欧美一区观看| 亚洲一区二区三区精品在线| 激情五月***国产精品| 欧美小视频在线| 免费精品99久久国产综合精品| 亚洲伊人久久综合| 亚洲美女黄网| 亚洲韩国一区二区三区| 久久久亚洲人| 欧美专区福利在线| 亚洲曰本av电影| 99re8这里有精品热视频免费| 一区免费观看| 国产一区日韩一区| 国产女主播一区二区| 欧美性一区二区| 欧美日韩亚洲一区二区| 欧美+亚洲+精品+三区| 久久蜜桃av一区精品变态类天堂| 亚洲小视频在线观看| 一区二区高清在线观看| 亚洲人成在线播放| 亚洲人成精品久久久久| 亚洲春色另类小说| 欧美激情久久久久| 欧美成年人在线观看| 欧美a一区二区| 欧美sm重口味系列视频在线观看| 狼狼综合久久久久综合网| 久久亚洲不卡| 欧美成人高清视频| 亚洲第一狼人社区| 亚洲国产三级网| 亚洲精品系列| 一区二区三区久久久| 亚洲午夜极品| 亚洲欧美日韩精品久久久久| 亚洲欧美日韩国产一区二区三区| 亚洲影视在线| 久久国产视频网| 免费成人黄色| 欧美日韩免费视频| 国产精品视频导航| 国产在线精品一区二区夜色| 精品成人在线观看| 亚洲日本电影| 亚洲专区一二三| 亚洲欧美视频| 免费观看30秒视频久久| 国内精品视频一区| 亚洲国产精品久久91精品| 一本久道久久综合中文字幕| 亚洲一二三四区| 久久久之久亚州精品露出| 欧美成人午夜影院| 亚洲片在线观看| 午夜激情一区| 欧美大片一区| 国产精品揄拍一区二区| 在线成人性视频| 亚洲一区成人| 美女在线一区二区| 日韩一区二区精品葵司在线| 午夜激情综合网| 欧美多人爱爱视频网站| 国产精品一区二区久久久| 在线观看成人一级片| 亚洲视频在线观看视频| 久久躁日日躁aaaaxxxx| 日韩视频在线一区二区三区| 欧美一乱一性一交一视频| 欧美精品综合| 悠悠资源网亚洲青| 亚洲香蕉网站| 亚洲电影视频在线| 亚洲国产另类精品专区| 久久婷婷久久| 欧美激情视频免费观看| 亚洲欧美精品在线观看| 欧美国产日韩二区| 激情懂色av一区av二区av| 亚洲视频视频在线| 欧美激情一二三区| 久久精品日产第一区二区| 欧美视频网站| 99国产精品视频免费观看一公开 | 欧美淫片网站| 日韩视频精品在线| 欧美激情第8页| 亚洲国产高清自拍| 久久综合九色欧美综合狠狠|