• <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>

            旅途

            如果想飛得高,就該把地平線忘掉

            vector內存管理

            為了提高效率,實際上vector 并不是隨每一個元素的插入而增長自己,而是當vector 需
            要增長自身時,它實際分配的空間比當前所需的空間要多一些.。也就是說它分配了一些額
            外的內存容量或者說它預留了這些存儲區分配的額外容量的確切數目由具體實現定義,
            這個策略使容器的增長效率更高——因此實際上對于小的對象vector 在實踐中比list
            效率更高
            讓我們來看一看在C++標準庫的Rogue Wave 實現版本下的一些例子但是首先
            我們要弄清楚容器的容量和長度size 之間的區別。
            容量是指在容器下一次需要增長自己之前能夠被加入到容器中的元素的總數,容量只與
            連續存儲的容器相關,例如vector deque 或string ,list 不要求容量。為了知道一個容器的
            容量我們調用它的capacity()操作而長度size 是指容器當前擁有元素的個數為了獲
            得容器的當前長度我們調用它的size()操作例。

            我在VC++.net上試驗的代碼,可以看出他的增長方式

            ?? FILE *file=freopen("1.txt","w",stdout);
            ?? vector<int> vec;
            ?? cout<<"capacity"<<vec.capacity()<<"size"<<vec.size()<<endl;
            ?? for(int i=0;i<100;i++)
            ?? {
            ????? vec.push_back(i);
            ?? cout<<"capacity"<<vec.capacity()<<"size"<<vec.size()<<endl;
            ?? }


            結果如下:
            capacity0size0
            capacity1size1
            capacity2size2
            capacity3size3
            capacity4size4
            capacity6size5
            capacity6size6
            capacity9size7
            capacity9size8
            capacity9size9
            capacity13size10
            capacity13size11
            capacity13size12
            capacity13size13
            capacity19size14
            capacity19size15
            capacity19size16
            capacity19size17
            capacity19size18
            capacity19size19
            capacity28size20
            capacity28size21
            capacity28size22
            capacity28size23
            capacity28size24
            capacity28size25
            capacity28size26
            capacity28size27
            capacity28size28
            capacity42size29
            capacity42size30
            capacity42size31
            capacity42size32
            capacity42size33
            capacity42size34
            capacity42size35
            capacity42size36
            capacity42size37
            capacity42size38
            capacity42size39
            capacity42size40
            capacity42size41
            capacity42size42
            capacity63size43
            capacity63size44
            capacity63size45
            capacity63size46
            capacity63size47
            capacity63size48
            capacity63size49
            capacity63size50
            capacity63size51
            capacity63size52
            capacity63size53
            capacity63size54
            capacity63size55
            capacity63size56
            capacity63size57
            capacity63size58
            capacity63size59
            capacity63size60
            capacity63size61
            capacity63size62
            capacity63size63
            capacity94size64
            capacity94size65
            capacity94size66
            capacity94size67
            capacity94size68
            capacity94size69
            capacity94size70
            capacity94size71
            capacity94size72
            capacity94size73
            capacity94size74
            capacity94size75
            capacity94size76
            capacity94size77
            capacity94size78
            capacity94size79
            capacity94size80
            capacity94size81
            capacity94size82
            capacity94size83
            capacity94size84
            capacity94size85
            capacity94size86
            capacity94size87
            capacity94size88
            capacity94size89
            capacity94size90
            capacity94size91
            capacity94size92
            capacity94size93
            capacity94size94
            capacity141size95
            capacity141size96
            capacity141size97
            capacity141size98
            capacity141size99
            capacity141size100

            對于小的數據類型vector 的性能要比list 好得多,而對于大型的數據類型則相反list 的性能要好得多,區別是由于vector 需要重新增長以及拷貝元素。

            無論是list 還是vector ,對于已定義拷貝構造函數的類來說插入這樣的類的元素都需要調用拷貝構造函數拷貝構造函數(用該類型的一個對象初始化該類型的另一個對象)

            這正說明了在簡單類和string 的鏈表之間插入代價的區別:簡單類對象和大型簡單類對象通過按位拷貝插入一個對象的所有位被拷貝到第二個對象的位中,而string 類對象和大型復雜類對象通過調用拷貝構造函數來插入。

            另外隨著每次重新分配內存,vector 必須為每個元素調用拷貝構造函數,而且在釋放原來的內存時它要為每個元素調用其相關類型的析構函數。vector 的動態自我增長越頻繁,元素插入的開銷就越大。

            當然,一種解決方案是,當vector 的開銷變得非常大時把vector 轉換成list ;另一種經
            常使用的方案是通過指針間接存儲復雜的類對象。

            posted on 2007-09-20 15:15 旅途 閱讀(5671) 評論(0)  編輯 收藏 引用 所屬分類: C++ STL

            久久国产一区二区| 91麻精品国产91久久久久| 一本色道久久HEZYO无码| 蜜臀久久99精品久久久久久小说| 国产精品一区二区久久国产| 中文字幕成人精品久久不卡| 久久亚洲sm情趣捆绑调教| 久久被窝电影亚洲爽爽爽| 伊人 久久 精品| 久久国产成人亚洲精品影院| 亚洲精品乱码久久久久久蜜桃不卡| 亚洲成人精品久久| 亚洲中文久久精品无码| 久久久国产视频| 久久久久久久综合综合狠狠| 久久久久久a亚洲欧洲aⅴ| 天天躁日日躁狠狠久久| 国产精品久久久久免费a∨| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久人人爽人人精品视频| 久久精品人人做人人爽电影蜜月| 色综合久久夜色精品国产| 亚洲嫩草影院久久精品| 国产国产成人精品久久| 日产精品久久久一区二区| 精品伊人久久大线蕉色首页| 久久久黄色大片| 久久久久久久久波多野高潮| 一本一本久久a久久精品综合麻豆| 精品欧美一区二区三区久久久| 久久精品99久久香蕉国产色戒| 国内精品久久久人妻中文字幕| 久久夜色精品国产欧美乱| 久久精品亚洲中文字幕无码麻豆 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久狠狠爱亚洲综合影院 | 久久91亚洲人成电影网站| 久久精品国产99国产电影网| 国产精品久久久天天影视香蕉| 一本大道加勒比久久综合| 精品久久综合1区2区3区激情 |