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

            無(wú)我

            讓內(nèi)心永遠(yuǎn)燃燒著偉大的光明的精神之火!
            靈活的思考,嚴(yán)謹(jǐn)?shù)膶?shí)現(xiàn)
            豪邁的氣魄、頑強(qiáng)的意志和周全的思考

            STL問(wèn)題系列一

            一直在學(xué)習(xí)STL,用的書籍是王昕譯的《C++ STL 中文版》,學(xué)習(xí)中產(chǎn)生很多問(wèn)題,特在這向各位高手請(qǐng)教,以下問(wèn)題基本是按教材章節(jié)順序給出的,如果您手中也剛好有這樣一本書,那就太好了,這樣就不會(huì)因?yàn)槲依斫獾哪w淺而讓您不明白題意,總之,請(qǐng)各位高手不吝賜教:
            STL問(wèn)題系列一
            1、《C++STL 中文版》第一章課后習(xí)題:1-4、解釋為什么在所寫算法中使用其他種類的迭代器,而不是隨機(jī)存取迭代器?1-5、解釋為什么寧愿定義一個(gè)僅能通過(guò)迭代器來(lái)存取的數(shù)據(jù)結(jié)構(gòu),而不是讓他可以被隨機(jī)存取呢?

            2、《C++STL 中文版》迭代器部分一直介紹輸入、輸去、前向、雙向、隨機(jī)迭代器,然而我以為只要以<iterator>建立的對(duì)象就具有隨機(jī)迭代器的功能,為何討論前向、雙向呢?

            3、從《C++STL 中文版》第一章后面的習(xí)題看前向、雙向、隨機(jī)迭代器從性質(zhì)和條件上有較大差別,請(qǐng)問(wèn)這在深層上如何理解呢?

            4、《C++STL 中文版》第二章習(xí)題:2-3“當(dāng)T和U中有一個(gè)是const類型時(shí),我們可能需要經(jīng)常構(gòu)造一個(gè)pair<T,U>對(duì)象。下面的定義是否可以達(dá)到這樣的效果?如果不可以,請(qǐng)說(shuō)出你的理由。
            template<class T,class U>inline pair<T,U> make_pair(T& x,U& y)
            {return  (pair<T,U> (x,y));}”

            5、《C++STL 中文版》2-4“請(qǐng)描述出一種可能的編碼情況,使得表達(dá)式 x.first < y.first ||
            !(y.first < x.first)  && x.second < y.second 并不等同于 x.first < y.first || x.first == y.first  && x.second < y.second。”

            6、STL在他的文件中定義了指針和引用,但同時(shí)還總是定義常指針和常引用,為何兩者必須分開實(shí)現(xiàn)呢?

            7、《C++STL 中文版》第四章:4-6“寫出一個(gè)分配器,它將對(duì)象存儲(chǔ)在一個(gè)磁盤文件中,并且維護(hù)一個(gè)小小的高速緩存來(lái)存儲(chǔ)程序內(nèi)存中的有效對(duì)象。”

            8、《C++STL 中文版》第四章:4-7“在那種情況下,分配器應(yīng)該以與模板類allocator不一致的方式來(lái)定義成員函數(shù)construct和destroy?”

            9、<algorithm>文件中sort_heap函數(shù)功能:void  sort_heap(RanIt  first, RanIt  last)重排由區(qū)間[first,last)中的迭代器指定的序列,產(chǎn)生一個(gè)按 operator <排序的序列。但是最初的序列也必須是一個(gè)同樣按 operator < 排序的堆。這樣看,那該函數(shù)的實(shí)際意義呢?

            posted on 2007-09-13 14:36 Tim 閱讀(1681) 評(píng)論(8)  編輯 收藏 引用 所屬分類: C/C++語(yǔ)言

            評(píng)論

            # re: STL問(wèn)題系列一 2007-09-13 15:03 Minidx全文檢索

            怎么感覺(jué)像在考試……呵呵  回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-13 20:21 螞蟻終結(jié)者

            這本書我沒(méi)看過(guò),不過(guò)The C++ Standard Library很不錯(cuò)  回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-13 21:48 沐楓

            這個(gè)不要放在首頁(yè)吧...  回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-13 22:53 沐楓

            1、《C++STL 中文版》第一章課后習(xí)題:1-4、解釋為什么在所寫算法中使用其他種類的迭代器,而不是隨機(jī)存取迭代器?1-5、解釋為什么寧愿定義一個(gè)僅能通過(guò)迭代器來(lái)存取的數(shù)據(jù)結(jié)構(gòu),而不是讓他可以被隨機(jī)存取呢?
            >>
            1-4,并不是說(shuō)不能使用隨機(jī)存取迭代器.比如sort就是使用隨機(jī)迭代器.設(shè)計(jì)一個(gè)算法,要選擇哪種迭代器,是要看具體什么算法.如果前向能滿足,就選前向,否則才考慮雙向,最后再考慮隨機(jī).
            1-5,問(wèn)題與1-4是一致的.這里也不是寧愿不寧愿的問(wèn)題.不同的數(shù)據(jù)結(jié)構(gòu)有不同的目的.沒(méi)有特別的要求.這兩個(gè)題稍有誤導(dǎo).主要是STL中的算法基本上都是通過(guò)迭代器存取.因此,符合迭代器的結(jié)構(gòu),就可以直接使用上這些算法.接口也統(tǒng)一,設(shè)計(jì)也清楚.

            2、《C++STL 中文版》迭代器部分一直介紹輸入、輸去、前向、雙向、隨機(jī)迭代器,然而我以為只要以<iterator>建立的對(duì)象就具有隨機(jī)迭代器的功能,為何討論前向、雙向呢?
            >>
            迭代器是一種存取容器數(shù)據(jù)結(jié)構(gòu)的方式.并不是所有的容器都可以直接支持隨機(jī)訪問(wèn)的,或者說(shuō),用隨機(jī)訪問(wèn)效率非常低下.比如鏈表.(雙向鏈表和單向鏈表等)

            3、從《C++STL 中文版》第一章后面的習(xí)題看前向、雙向、隨機(jī)迭代器從性質(zhì)和條件上有較大差別,請(qǐng)問(wèn)這在深層上如何理解呢?
            >>
            顯然,前向指只能向從前向后依順序訪問(wèn)(如單向鏈表)
            .雙向指可以向前,也可以向后依順序訪問(wèn)(如雙向鏈表)
            .隨機(jī),則是可以隨機(jī)訪問(wèn)容器中的任何一個(gè)元素(如數(shù)組).

            4、《C++STL 中文版》第二章習(xí)題:2-3“當(dāng)T和U中有一個(gè)是const類型時(shí),我們可能需要經(jīng)常構(gòu)造一個(gè)pair<T,U>對(duì)象。下面的定義是否可以達(dá)到這樣的效果?如果不可以,請(qǐng)說(shuō)出你的理由。
            template<class T,class U>inline pair<T,U> make_pair(T& x,U& y)
            {return (pair<T,U> (x,y));}”
            >>
            這個(gè)
            這樣的效果是什么效果?是指能不能構(gòu)造成功?當(dāng)然可以構(gòu)造成功啦.例如:int a=2,b=4;pair<const int, int> c(make_pair(a,b));


            5、《C++STL 中文版》2-4“請(qǐng)描述出一種可能的編碼情況,使得表達(dá)式 x.first < y.first ||
            !(y.first < x.first) && x.second < y.second 并不等同于 x.first < y.first || x.first == y.first && x.second < y.second。”
            >>
            沒(méi)看過(guò)這本書.不明白要求什么寫哪部份的編碼.單從表達(dá)式來(lái)說(shuō).
            隨便寫一個(gè)不符合要求的operator == 就好了(比如operator==返回<的結(jié)果).

            6、STL在他的文件中定義了指針和引用,但同時(shí)還總是定義常指針和常引用,為何兩者必須分開實(shí)現(xiàn)呢?
            >>
            常指針和指針...這指的是typedef嗎?typedef談不上實(shí)現(xiàn)不實(shí)現(xiàn)的吧.只不過(guò)是一個(gè)typedef而已啦.C++的typedef并不是一個(gè)真正的類型,只是類型的別稱而已.

            7、《C++STL 中文版》第四章:4-6“寫出一個(gè)分配器,它將對(duì)象存儲(chǔ)在一個(gè)磁盤文件中,并且維護(hù)一個(gè)小小的高速緩存來(lái)存儲(chǔ)程序內(nèi)存中的有效對(duì)象。”
            >>
            這個(gè)...為什么不自已試著寫寫呢.

            8、《C++STL 中文版》第四章:4-7“在那種情況下,分配器應(yīng)該以與模板類allocator不一致的方式來(lái)定義成員函數(shù)construct和destroy?”
            >>
            allocator的construct是用placement new來(lái)實(shí)現(xiàn)的.construct的目的就是用于調(diào)用構(gòu)造函數(shù).在C++中,似乎只有用placement new的方式來(lái)手工調(diào)用構(gòu)造函數(shù).不一致的話,是不是指不用調(diào)用構(gòu)造函數(shù),或是有特別的調(diào)用方式?想不出來(lái)可以不用調(diào)用構(gòu)造函數(shù)的實(shí)現(xiàn)或別的調(diào)用方式.
            或者是不一致的方式另有所指?

            9、<algorithm>文件中sort_heap函數(shù)功能:void sort_heap(RanIt first, RanIt last)重排由區(qū)間[first,last)中的迭代器指定的序列,產(chǎn)生一個(gè)按 operator <排序的序列。但是最初的序列也必須是一個(gè)同樣按 operator < 排序的堆。這樣看,那該函數(shù)的實(shí)際意義呢?
            >>答:
            堆排序.按<排序的堆,并不等于整個(gè)序列是按<排好序的.例如:( 9 6 8 4 1 5 7 3 2 0 )就是按<排好序的堆.但按<排好序的序列是(1 2 3 4 5 6 7 8 9)  回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-14 09:28 Tim

            沐楓,你好!非常感謝你這樣詳盡的回答我這么多問(wèn)題。我收獲很大,謝謝!這里對(duì)于第5題,“《C++STL 中文版》2-4“請(qǐng)描述出一種可能的編碼情況,使得表達(dá)式 x.first < y.first ||
            !(y.first < x.first) && x.second < y.second 并不等同于 x.first < y.first || x.first == y.first && x.second < y.second。”事實(shí)上,書中給出的C++ STL源碼中在比較時(shí)大部分都是采用這種寫法。其實(shí)邏輯是很明顯的,例如對(duì)pair對(duì)x和y,先比較x.first < y.first ,不成立。當(dāng)x.first == y.first 時(shí),在比較x.second < y.second,但寫法在判斷
            x.first < y.first 不成立后,STL的作者好像認(rèn)為!(y.first < x.first)的作用要大于x.first == y.first ,而按題意,他還要我們給出這樣的編碼,我給不出來(lái),可能是經(jīng)驗(yàn)有限。你的觀點(diǎn)呢?
            對(duì)第8題:8、《C++STL 中文版》第四章:4-7“在那種情況下,分配器應(yīng)該以與模板類allocator不一致的方式來(lái)定義成員函數(shù)construct和destroy?”
            >>
            allocator的construct是用placement new來(lái)實(shí)現(xiàn)的.construct的目的就是用于調(diào)用構(gòu)造函數(shù).在C++中,似乎只有用placement new的方式來(lái)手工調(diào)用構(gòu)造函數(shù).不一致的話,是不是指不用調(diào)用構(gòu)造函數(shù),或是有特別的調(diào)用方式?想不出來(lái)可以不用調(diào)用構(gòu)造函數(shù)的實(shí)現(xiàn)或別的調(diào)用方式.
            或者是不一致的方式另有所指?
            >>我想你的分析是對(duì)的,應(yīng)該是一不一樣的方式來(lái)定義成員函數(shù)construct和destroy,只是我看完了《C++STL 中文版》,對(duì)分配器的認(rèn)識(shí)還是很模糊。不明白其深層原理。@沐楓
              回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-14 17:20 沐楓

            關(guān)于 < 的比較
            你有沒(méi)有注意到,大多數(shù)的STL算法,都只需要傳進(jìn)去一個(gè)比較函數(shù)就可以了?
            默認(rèn)情況下,傳進(jìn)去的就是 < 比較.
            那么,如果你要比較 a == b 怎么辦?
            只有 !(a<b) && !(b<a)了.
            所以,并非是說(shuō) ==的作用要小于<,而是條件所限.既然一個(gè)比較就可以了,總不能讓你提供一大堆的比較函數(shù)吧?  回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-16 12:25 Tim

            恩,你說(shuō)得對(duì)!很有道理,謝謝!
            @沐楓
              回復(fù)  更多評(píng)論   

            # re: STL問(wèn)題系列一 2007-09-30 14:27 空明流轉(zhuǎn)

            @Tim
            請(qǐng)參考 Effective STL的《注意區(qū)分equalization 和 equivalence》  回復(fù)  更多評(píng)論   

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            本博客原創(chuàng)文章,歡迎轉(zhuǎn)載和交流。不過(guò)請(qǐng)注明以下信息:
            作者:TimWu
            郵箱:timfly@yeah.net
            來(lái)源:www.shnenglu.com/Tim
            感謝您對(duì)我的支持!

            留言簿(9)

            隨筆分類(173)

            IT

            Life

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            久久精品午夜一区二区福利| 老男人久久青草av高清| 久久久久久综合一区中文字幕| 天天爽天天爽天天片a久久网| 久久精品成人免费国产片小草| 精品伊人久久久| 色偷偷888欧美精品久久久| 精品国产日韩久久亚洲| 久久精品无码午夜福利理论片| 国内精品久久久久国产盗摄| 久久无码AV中文出轨人妻| 亚洲国产精品久久久久婷婷软件| 久久这里的只有是精品23| 久久综合狠狠色综合伊人| 久久精品免费一区二区| 国内精品久久久久久麻豆 | 久久福利青草精品资源站免费 | 久久AⅤ人妻少妇嫩草影院| 波多野结衣AV无码久久一区| 精品无码人妻久久久久久| 久久国产精品一国产精品金尊 | 2020最新久久久视精品爱| 久久强奷乱码老熟女网站| 久久性生大片免费观看性| 97久久精品人人澡人人爽| 精品久久久无码人妻中文字幕豆芽 | 国产激情久久久久影院小草 | 人妻无码精品久久亚瑟影视| 久久精品不卡| 91精品婷婷国产综合久久| 久久综合亚洲欧美成人| 精品久久久久久中文字幕大豆网| 午夜精品久久久久9999高清| 久久精品国产精品亜洲毛片| 久久久久久免费一区二区三区| AAA级久久久精品无码片| 精品免费久久久久久久| 青青草原综合久久| 日本道色综合久久影院| 很黄很污的网站久久mimi色| 久久影视综合亚洲|