• <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()調用返回vector中最大能夠存儲的元素個數.
            當有新的元素插入的時候(vector::push_back)需要擴充容量,于是capacity的值就變化。而不同的組織可以制訂自己的變化規則,即對capacity不同的實現。

            注:reserve會使容器在必要的時候增長,以便容納指定數目的元素。
            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的關系,如果有那是什么呢?
            x+ [x/2];

            注意:如果先分配capacity=10,那么插入一個元素后就變為:10+5=15(gcc)

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

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


            而我們要做的應該是充分認識這一點,并且有效的利用這個特性。
            比如:
            在插入大量小對象時  是gcc比較好,還是vc的比較好?
            大對象的時候呢 ?

            關于效率的討論將是下一步的事
             

             


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

            Feedback

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

            樓主你總結的“不同”是庫實現的不同,而不是編譯器的不同  回復  更多評論   

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

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

            而且我們知道c/c++標準組織只是給了我們函數的標準接口,而不同的組織給出自己的實現。gcc 和vc的確在capacity上實現不同造成了如上所說。

            謝謝cf


              回復  更多評論   

            # re: vector::capacity 2006-03-13 17:22 沐楓網志

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

            另外,內存分配策略,對于這兩種實現來說,并沒有什么優劣。假如你對內存分配有特殊要求,或者是內存有限制,或者是要求高性能,你還可以自定義內存分配策略。這都是標準庫提供的接口,可以很方便的重定義,這和編譯器是無關的。  回復  更多評論   

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

            我沒有在stlport測試 , 其實現的capacity()當然與vc6下的實現可能不同。
            的確在這里 認為與編譯器有關 是不妥的;應該是無關的。
            capacity的外在表現決定于capacity的實現代碼。  回復  更多評論   


            国产美女亚洲精品久久久综合| 久久久精品人妻一区二区三区四 | 久久精品麻豆日日躁夜夜躁| 精品国产婷婷久久久| 久久久婷婷五月亚洲97号色| 免费精品久久天干天干| 手机看片久久高清国产日韩| 久久99精品久久久久久噜噜 | 国产成人久久AV免费| 久久精品国产亚洲av影院| 无码日韩人妻精品久久蜜桃| 日韩AV无码久久一区二区| 久久青青草原精品国产| 狠狠88综合久久久久综合网| 久久精品国产亚洲AV嫖农村妇女| 精品熟女少妇a∨免费久久| 日日躁夜夜躁狠狠久久AV| 久久综合88熟人妻| 久久香蕉国产线看观看99| 亚洲国产精品久久久久婷婷软件| 亚洲伊人久久大香线蕉苏妲己| 国产午夜精品理论片久久| 亚洲精品国产综合久久一线| 免费无码国产欧美久久18| 狠狠色婷婷久久一区二区三区 | 亚洲成人精品久久| 天天综合久久久网| 伊人久久大香线蕉成人| 久久精品亚洲中文字幕无码麻豆| 91久久精品视频| 久久久久久久97| 91精品国产综合久久香蕉 | 久久久久久久人妻无码中文字幕爆| 国产精品禁18久久久夂久| 性做久久久久久久久老女人| 久久天天躁狠狠躁夜夜avapp | 亚洲精品乱码久久久久久按摩| 国产精品久久影院| 波多野结衣久久精品| 亚洲午夜久久影院| 欧美亚洲色综久久精品国产|