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

            Just for i0'

            Love i0

            vector::capacity

            vector::capacity
            : Returns the number of elements that the vector could 
                contain without allocating more   storage.

            vector的capacity()調(diào)用返回vector中最大能夠存儲(chǔ)的元素個(gè)數(shù).
            當(dāng)有新的元素插入的時(shí)候(vector::push_back)需要擴(kuò)充容量,于是capacity的值就變化。而不同的組織可以制訂自己的變化規(guī)則,即對capacity不同的實(shí)現(xiàn)。

            注:reserve會(huì)使容器在必要的時(shí)候增長,以便容納指定數(shù)目的元素。
            vector<int> v;
            v.reserve(10);
            cout << v.capacity() << endl; //10

            那么在linux:(kernel2.6.9)gcc下:
            #include<iostream>
            #include<vector>
            using namespace std;
            int main()
            {
            vector <int> v;
            for(int i=0;i<40;i )
            {
            v.push_back(i);
            cout<< v.capacity()<<endl;

            }
            return 0;
            }

            將輸出: 1 2 4 8 16 .... 2^n

            上述程序在windows vc6.0下:
            將輸出: 1 2 3 4 6 6 9 9 9 ....
            顯然不是2^n的關(guān)系,如果有那是什么呢?
            x+ [x/2];

            注意:如果先分配capacity=10,那么插入一個(gè)元素后就變?yōu)椋?0+5=15(gcc)

            比較起來就是: 前者: x +x ; 后者: x +[x/2]; 

             例如:
            同樣的cpu和內(nèi)存下測試i=(0, 4000):
            linux gcc:30000ms
            window vc6.0:4515ms
            注意:在打印的情況下,打印也會(huì)占用很多時(shí)間
            上述的試驗(yàn)數(shù)字具有不可再現(xiàn)性。


            而我們要做的應(yīng)該是充分認(rèn)識(shí)這一點(diǎn),并且有效的利用這個(gè)特性。
            比如:
            在插入大量小對象時(shí)  是gcc比較好,還是vc的比較好?
            大對象的時(shí)候呢 ?

            關(guān)于效率的討論將是下一步的事
             

             


            posted on 2006-03-06 12:25 for_I0 閱讀(1477) 評論(4)  編輯 收藏 引用

            Feedback

            # re: vector::capacity 2006-03-06 14:09 cf

            樓主你總結(jié)的“不同”是庫實(shí)現(xiàn)的不同,而不是編譯器的不同  回復(fù)  更多評論   

            # re: vector::capacity 2006-03-06 19:30 for_Linda

            @cf 你說的很對!
            我們知道
            編譯器完成了代碼的語法分析和詞法分析以及目標(biāo)代碼的生成等,
            如果我們調(diào)用庫函數(shù),那么編譯的時(shí)候就會(huì)從編譯器的庫中取來函數(shù)的相應(yīng)地址來代替我們的調(diào)用函數(shù),所以本質(zhì)上是庫實(shí)現(xiàn)的不同這毫無疑問。
            只不過通過編譯器體現(xiàn)而已。

            而且我們知道c/c++標(biāo)準(zhǔn)組織只是給了我們函數(shù)的標(biāo)準(zhǔn)接口,而不同的組織給出自己的實(shí)現(xiàn)。gcc 和vc的確在capacity上實(shí)現(xiàn)不同造成了如上所說。

            謝謝cf


              回復(fù)  更多評論   

            # re: vector::capacity 2006-03-13 17:22 沐楓網(wǎng)志

            如果你用的是stlport,那么它在vc下的表現(xiàn)也會(huì)與vc原先的表現(xiàn)不一樣。
            那么請問,vc6編譯器本身,難道又可以有什么不同嗎?

            另外,內(nèi)存分配策略,對于這兩種實(shí)現(xiàn)來說,并沒有什么優(yōu)劣。假如你對內(nèi)存分配有特殊要求,或者是內(nèi)存有限制,或者是要求高性能,你還可以自定義內(nèi)存分配策略。這都是標(biāo)準(zhǔn)庫提供的接口,可以很方便的重定義,這和編譯器是無關(guān)的。  回復(fù)  更多評論   

            # re: vector::capacity 2006-03-13 18:45 for_Linda

            我沒有在stlport測試 , 其實(shí)現(xiàn)的capacity()當(dāng)然與vc6下的實(shí)現(xiàn)可能不同。
            的確在這里 認(rèn)為與編譯器有關(guān) 是不妥的;應(yīng)該是無關(guān)的。
            capacity的外在表現(xiàn)決定于capacity的實(shí)現(xiàn)代碼。  回復(fù)  更多評論   


            国产精品99久久久久久董美香| 久久亚洲国产精品123区| 久久久久久伊人高潮影院| 久久久久免费精品国产| 99精品久久精品一区二区| 狠狠精品久久久无码中文字幕| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国产精品欧美久久久天天影视| 色综合久久88色综合天天| 久久亚洲高清综合| 精品国产一区二区三区久久久狼| 久久久久四虎国产精品| 狠狠色丁香久久婷婷综合蜜芽五月| 麻豆成人久久精品二区三区免费 | 久久久久人妻一区精品果冻| 人妻无码精品久久亚瑟影视| 久久久久国产一级毛片高清版| 久久丫忘忧草产品| 欧美久久亚洲精品| 久久99免费视频| 996久久国产精品线观看| 精品久久久一二三区| 久久本道综合久久伊人| 99国产精品久久| 97热久久免费频精品99| 久久婷婷五月综合国产尤物app| 国产一区二区精品久久凹凸| 大伊人青草狠狠久久| 久久午夜伦鲁片免费无码| 中文精品99久久国产| 蜜臀久久99精品久久久久久| 7国产欧美日韩综合天堂中文久久久久 | 久久久久人妻一区二区三区| 国产精品午夜久久| 国内精品久久久久影院网站| 国产精品久久成人影院| 久久精品国产亚洲av麻豆色欲| 久久久久久久久久久| 亚洲va中文字幕无码久久| 久久久久久久久久久精品尤物| 久久久久亚洲AV成人网人人网站|