• <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++隨筆 之 C++標(biāo)準(zhǔn)庫(kù)5(原創(chuàng))--STL

            STL 是個(gè)部件庫(kù) (component library) ,其中的部件包括有容器 (container ,儲(chǔ)存任意類型對(duì)象的對(duì)象 ) 和算法。只要用戶對(duì)自己定義的部件做點(diǎn)小小的要求, STL 中的算法就可以工作在用戶自定義的容器上,或者 STL 中的容器可以使用用戶自定義的算法。
            我們可以把軟件部件想象成一個(gè)三位空間。第一維表示數(shù)據(jù)類型(int, double, char, …),第二維表示容器(array, linked-list, …)

            第三維表示算法
            (sort, merge, search, …)

            STL 包含 5 個(gè)主要的部分,
            ·算法 (Algorithm) :能運(yùn)行在不同容器 (container) 上的計(jì)算過(guò)程

            ·容器 (Container) :能夠保留并管理對(duì)象的對(duì)象

            ·迭代器 (Iterator) :算法存取容器 (algorithm-access to containers) 的抽象,以便算法可以應(yīng)用在不同的容器上

            ·函數(shù)對(duì)象 (Function Object) :定義了函數(shù)調(diào)用操作符 (operator()) 的類

            ·適應(yīng)器 (Adaptor) :封裝一個(gè)部件以提供另外的接口 ( 例如用 list 實(shí)現(xiàn) stack)


            正是因?yàn)橛辛薎terator,算法才和容器分開(kāi)了.

            容器
            (Container) 是能夠保存其他類型的對(duì)象的類。容器形成了 STL 的關(guān)鍵部件。當(dāng)書寫任何類型軟件的時(shí)候,把特定類型的元素集聚起來(lái)都是很至關(guān)重要的任務(wù)。

            ?????? STL 中有順序容器 (Sequence Container) 和關(guān)聯(lián)容器 (Associative Container)

            STL 中支持的容器總結(jié)如下:

            順序容器 (Sequence Container)

            向量 (Vector)

            ?

            雙向隊(duì)列 (Deque)

            ?

            線性表 (List)

            關(guān)聯(lián)容器 (Associative Container)

            集合 (Set)

            ?

            多集合 (MultiSet)

            ?

            映射 (Map)

            ?

            多映射 (MultiSet)


            迭代器
            (Iterator) 是指針 (pointer) 的泛化,它允許程序員以相同的方式處理不同的數(shù)據(jù)結(jié)構(gòu) ( 容器 ) STL 中有 5
            中類型的迭代器,它們分別滿足一定的要求。不同的迭代器要求定義的操作不一樣。
            輸入和輸出迭代器
            向前迭代器
            雙向迭代器
            任意存取迭代器

            算法

            STL 庫(kù)中的算法都以迭代器類型為參數(shù),這就和數(shù)據(jù)結(jié)果的具體實(shí)現(xiàn)分離開(kāi)了。基于此,這些算法被稱作基本算法 (generic algorithm)
            如“尋找(Find)”、“鄰居尋找(Adjacent find)”、“計(jì)數(shù)(Count)”、“不匹配(Mismatch)”、“相等(Equal)”、“搜索(Search)
            拷貝(Copy)”、“交換(Swap)”、“變換(Transform)”、“替換(Replace)、“填充(Fill)、“產(chǎn)生(Generate)、“遷移(Remove)、“唯一(Unique)、“翻轉(zhuǎn)(Reverse)、“旋轉(zhuǎn)(Rotate)、“任意洗牌(Random shuffle)、“分區(qū)(Partitions)

            適應(yīng)器
            (Adaptor) 是提供接口映射的模板類 (Adaptors are template classes that provide interface mappings)
            。適應(yīng)器基于其他類來(lái)實(shí)現(xiàn)新的功能,成員函數(shù)可以被添加、隱藏,也可合并以得到新的功能。

            (Stack)

            ?????? 棧可以用向量 (vector) 、線性表 (list) 或雙向隊(duì)列 (deque) 來(lái)實(shí)現(xiàn):

            stack<vector<int>>?????? s1;

            stack<list<int>?????? >???? s2;

            stack<deque<int>>s3;

            隊(duì)列 (Queue)

            ?????? 隊(duì)列可以用線性表 (list) 或雙向隊(duì)列 (deque) 來(lái)實(shí)現(xiàn) ( 注意 vector container 不能用來(lái)實(shí)現(xiàn) queue
            因?yàn)?/span> vector 沒(méi)有成員函數(shù) pop_front! )

            queue<list<int>>??? q1;

            queue<deque<int>>?????? q2;

            優(yōu)先級(jí)隊(duì)列 (Priority Queue)

            ?????? 優(yōu)先級(jí)隊(duì)列可以用向量 (vector) 或雙向隊(duì)列 (deque) 來(lái)實(shí)現(xiàn) ( 注意 list container 不能用來(lái)實(shí)現(xiàn) queue
            因?yàn)?/span> list 的迭代器不是任意存取 iterator ,而 pop 中用到堆排序時(shí)是要求 random access iterator ! )

            priority_queue<vector<int>, less<int>>??????? pq1;??????? // 使用遞增 less<int> 函數(shù)對(duì)象排序

            priority_queue<deque<int>, greater<int>>??? pq2; ????? // 使用遞減 greater<int> 函數(shù)對(duì)象排序

            迭代適應(yīng)器

            逆向迭代器 (Reverse Iterator)

            ?????? 顧名思義,逆向迭代器的遞增是朝反方向前進(jìn)的。對(duì)于順序容器 (vector, list deque) ,其成員函數(shù) rbegin() rend() 都返回了相應(yīng)的逆向迭代器:

            list<int> l;

            for (int i = 1; i < 5; i++)

            ?????? l.push_back(i);

            copy(l.rbegin(), l.rend(), ostream_iterator<int> (cout, “ “));

            輸出結(jié)果是: 4 3 2 1

            ?

            插入迭代器 (Insert Iterator)

            ?????? 插入迭代器簡(jiǎn)化了向容器中插入元素的工作。插入迭代器指定了向容器中插入元素的位置。 STL 中有三種插入迭代器:

            ·向后插入 (back_insert_iterator) ,在容器尾部插入

            ·向前插入 (front_insert_iterator) ,在容器頭部插入

            ·插入 (insert_iterator) ,在容器中任一位置

            STL 中提供了三個(gè)函數(shù)分別構(gòu)造相應(yīng)的插入迭代器:

            · back_inserter

            · front_inserter

            · inserter

            ?

            原始存儲(chǔ)迭代器 (Raw Storage Iterator)

            ?????? 該迭代器允許算法將其結(jié)果保存進(jìn)沒(méi)有初始化的內(nèi)存中。

            函數(shù)適應(yīng)器

            否認(rèn)者 (Negator)

            ?????? 有兩個(gè)否認(rèn)者 not1 not2 分別是一元和二元函數(shù),它們分別使用一元和二元的謂詞 (Predicate) ,返回的是謂詞的結(jié)果的取反。

            ?

            包扎者 (Binder)

            ?????? STL 中有兩個(gè)包扎者函數(shù) bind1st bind2nd ,可以將一些值限定在指定區(qū)間中。

            ?

            函數(shù)指針的適應(yīng)器 (Adaptors for pointers to function)

            ?????? STL 中的算法和容器一般都需要函數(shù)對(duì)象 (function object) 作為參數(shù)。如果想用到常用的 C++ 函數(shù)時(shí),可以用 ptr_fun 把普通函數(shù)轉(zhuǎn)換成函數(shù)對(duì)象。比如 ptr_fun(strcmp) 就把常用的串比較函數(shù) strcmp 包裝成一個(gè)函數(shù)對(duì)象,就可用在 STL 算法和容器中了。

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

            評(píng)論

            # re: C++隨筆 之 C++標(biāo)準(zhǔn)庫(kù)5(原創(chuàng))--STL 2007-01-04 13:01 pengkuny

            看來(lái)STL功能很強(qiáng)大,我得好好學(xué)一下  回復(fù)  更多評(píng)論   

            # re: C++隨筆 之 C++標(biāo)準(zhǔn)庫(kù)5(原創(chuàng))--STL 2007-10-11 21:24 ptrrrrr

            文中的Stack,Queue和priority_queue舉的例子,全都少了一個(gè)參數(shù),而且書寫有點(diǎn)問(wèn)題

            比如stack<vector<int>> s1;

            應(yīng)該是stack<int, vector<int> > s1;  回復(fù)  更多評(píng)論   

            導(dǎo)航

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

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類(29)

            搜索

            最新隨筆

            最新評(píng)論

            99久久99久久| 亚洲国产精品无码成人片久久| 69SEX久久精品国产麻豆| aaa级精品久久久国产片| 成人久久综合网| 国产高潮久久免费观看| 久久www免费人成看国产片| 久久久国产一区二区三区| 久久久久久综合网天天| www性久久久com| 久久精品国产精品亚洲| 久久婷婷是五月综合色狠狠| 中文国产成人精品久久不卡| 久久精品国产清高在天天线| 亚洲欧美精品伊人久久| 一本久久a久久精品综合香蕉| 久久久久人妻一区二区三区 | 91精品国产91热久久久久福利| 国产免费久久精品丫丫| 久久精品免费一区二区| 7国产欧美日韩综合天堂中文久久久久| 国産精品久久久久久久| 中文国产成人精品久久不卡| 青青草原综合久久大伊人精品| 久久青青草视频| 久久精品一区二区三区不卡| 中文字幕无码av激情不卡久久| 精品久久久久中文字幕日本| 欧美精品丝袜久久久中文字幕 | 久久这里有精品视频| 久久A级毛片免费观看| 久久se精品一区精品二区国产| 无码人妻久久一区二区三区免费| 国产香蕉97碰碰久久人人| 久久久久亚洲av成人网人人软件| 国产激情久久久久影院小草| 东方aⅴ免费观看久久av | 大美女久久久久久j久久| 久久SE精品一区二区| 久久久久国产| 亚洲成人精品久久|