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

            C++編程失樂(lè)園

            致力于解決論壇的不足,探討C++的原理

            C++隨筆 之 STL[vector]的存儲(chǔ)技術(shù)(原創(chuàng))

            首先我們先來(lái)看Example Code:
            #include <vector>
            #include <iostream>
            #include <memory>
            using namespace std;
            void main()
            {
            ?vector<int> v;
            //?cout<<v.allocator;
            ?v.push_back(0);
            ?v.push_back(1);
            ?v.push_back(2);
            ?v.push_back(3);
            ?v.push_back(4);
            ?v.push_back(5);
            ?cout<<v.max_size();
            }
            利用VC6.0的內(nèi)存調(diào)試
            ?v.push_back(0);之后
            //_First迭代器00481B40
            //_Last迭代器00481B44
            //_End迭代器004B1B44
            ?v.push_back(1);之后
            //_First迭代器00481B00
            //_Last迭代器00481B08
            //_End迭代器004B1B08
            為什么在執(zhí)行一次push_back之后,迭代器全部會(huì)變呢?
            下面我們看看P.J. Plauger的代碼
            ?void insert(iterator _P, size_type _M, const _Ty& _X)
            ??{if (_End - _Last < _M)
            ???{size_type _N = size() + (_M < size() ? size() : _M);
            ???iterator _S = allocator.allocate(_N, (void *)0);
            ???iterator _Q = _Ucopy(_First, _P, _S);
            ???_Ufill(_Q, _M, _X);
            ???_Ucopy(_P, _Last, _Q + _M);
            ???_Destroy(_First, _Last);
            ???allocator.deallocate(_First, _End - _First);
            ???_End = _S + _N;
            ???_Last = _S + size() + _M;
            ???_First = _S; }
            ??else if (_Last - _P < _M)
            ???{_Ucopy(_P, _Last, _P + _M);
            ???_Ufill(_Last, _M - (_Last - _P), _X);
            ???fill(_P, _Last, _X);
            ???_Last += _M; }
            ??else if (0 < _M)
            ???{_Ucopy(_Last - _M, _Last, _Last);
            ???copy_backward(_P, _Last - _M, _Last);
            ???fill(_P, _P + _M, _X);
            ???_Last += _M; }}

            其中M = 1;
            當(dāng)_End - _Last < _M時(shí),就要重新分配內(nèi)存了,哦原來(lái)時(shí)這樣的.
            [個(gè)人認(rèn)為,在方便調(diào)試的時(shí)候,可以把C:\MSDEV\VC98\Include\下面的vector文件中的protected改成public:]
            下面我給出在5次插入之后其內(nèi)存分配
            push_back(2)
            //00481AC0
            //00481ACC
            //00481AD0
            push_back(3);
            //00481AC0
            //00481AD0
            //00481AD0
            push_back(4);
            //00481B20
            //00481B34
            //00481B40
            push_back(5);
            //00481B20
            //00481B38
            //00481B40
            注意沒(méi)有,_Last - _First之后的明顯是size() * 4
            [注:在VC6.0的STL版本是采用的PJSTL版本,是一種公認(rèn)最垃圾的STL版本
            在C++ Builder中的STL版本是采用的RW版本,Rouge Wave公司
            在unix下面GCC采用的是SGI Silicon Graphics Computer System Inc公司STL版本,我認(rèn)為在可讀性,可移植性方面最好的一個(gè)版本]

            posted on 2007-01-04 14:26 木木頭 閱讀(950) 評(píng)論(1)  編輯 收藏 引用 所屬分類: C++特性

            評(píng)論

            # re: C++隨筆 之 STL[vector]的存儲(chǔ)技術(shù)(原創(chuàng)) 2007-01-04 14:37 cppLock

            個(gè)人認(rèn)為,這樣的話,如果數(shù)據(jù)很大,vector的效率不會(huì)很高  回復(fù)  更多評(píng)論   

            導(dǎo)航

            <2007年1月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類(29)

            搜索

            最新隨筆

            最新評(píng)論

            99蜜桃臀久久久欧美精品网站| 久久久久久国产精品免费无码| 国产成人精品久久亚洲高清不卡| 国产91久久精品一区二区| 99国内精品久久久久久久| 国产视频久久| 久久香综合精品久久伊人| 亚洲欧美日韩精品久久| 久久99久久99精品免视看动漫| 久久久久亚洲av无码专区| 久久久久亚洲AV成人网| 亚洲AV成人无码久久精品老人| 色综合久久久久| 日韩精品无码久久久久久| 久久一区二区免费播放| 日本久久久久久中文字幕| 久久久久久久波多野结衣高潮| 色综合久久88色综合天天 | 狠狠色丁香久久综合婷婷| 欧美久久综合九色综合| 99久久亚洲综合精品网站| 欧洲人妻丰满av无码久久不卡| 色婷婷噜噜久久国产精品12p | 久久久久综合网久久| 国产成人精品综合久久久久 | 久久久久久人妻无码| 久久久久久久久久久精品尤物| 99热精品久久只有精品| 一本伊大人香蕉久久网手机| 天天爽天天狠久久久综合麻豆| 7777精品伊人久久久大香线蕉| 久久精品视频91| 亚洲欧美国产日韩综合久久| 久久福利片| 日日狠狠久久偷偷色综合0| 亚洲国产成人久久综合区| 久久久久亚洲精品无码网址| 精品久久人人爽天天玩人人妻| 久久99精品久久久久久9蜜桃| 久久激情亚洲精品无码?V| 久久天天躁狠狠躁夜夜不卡 |