• <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++編程失樂園

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

            C++隨筆 之 C++標(biāo)準(zhǔn)庫5(原創(chuàng))--STL

            STL 是個(gè)部件庫 (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ì)算過程

            ·容器 (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,算法才和容器分開了.

            容器
            (Container) 是能夠保存其他類型的對(duì)象的類。容器形成了 STL 的關(guān)鍵部件。當(dāng)書寫任何類型軟件的時(shí)候,把特定類型的元素集聚起來都是很至關(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 庫中的算法都以迭代器類型為參數(shù),這就和數(shù)據(jù)結(jié)果的具體實(shí)現(xiàn)分離開了。基于此,這些算法被稱作基本算法 (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)器基于其他類來實(shí)現(xiàn)新的功能,成員函數(shù)可以被添加、隱藏,也可合并以得到新的功能。

            (Stack)

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

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

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

            stack<deque<int>>s3;

            隊(duì)列 (Queue)

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

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

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

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

            ?????? 優(yōu)先級(jí)隊(duì)列可以用向量 (vector) 或雙向隊(duì)列 (deque) 來實(shí)現(xiàn) ( 注意 list container 不能用來實(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)

            ?????? 插入迭代器簡化了向容器中插入元素的工作。插入迭代器指定了向容器中插入元素的位置。 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)沒有初始化的內(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)庫5(原創(chuàng))--STL 2007-01-04 13:01 pengkuny

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

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

            文中的Stack,Queue和priority_queue舉的例子,全都少了一個(gè)參數(shù),而且書寫有點(diǎ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)論

            国产精品久久久久久五月尺| 精品熟女少妇a∨免费久久| 久久婷婷五月综合国产尤物app| 老司机国内精品久久久久| 久久天天躁狠狠躁夜夜网站| 波多野结衣久久| 久久久久久午夜精品| 亚洲欧美日韩精品久久亚洲区 | 久久露脸国产精品| 国产午夜久久影院| 久久无码av三级| 狠狠色婷婷综合天天久久丁香| 人妻精品久久久久中文字幕一冢本| 亚洲欧美伊人久久综合一区二区| 精品综合久久久久久97| 99蜜桃臀久久久欧美精品网站| 亚洲综合伊人久久大杳蕉| 日本人妻丰满熟妇久久久久久| 久久偷看各类wc女厕嘘嘘| 91视频国产91久久久| 精品久久久久久国产三级| 日本欧美国产精品第一页久久| 国产精品一区二区久久精品涩爱 | 欧美黑人激情性久久| 亚洲午夜久久久久妓女影院| 久久精品夜夜夜夜夜久久| 91超碰碰碰碰久久久久久综合| 久久99精品免费一区二区| 国产69精品久久久久APP下载| 无码人妻久久久一区二区三区| 久久99精品久久久久久久不卡| 青青青青久久精品国产h| 欧美久久亚洲精品| 亚洲国产精品无码成人片久久| 91精品国产高清久久久久久91 | 99久久精品免费看国产免费| 亚洲国产成人久久综合一区77| 久久久久人妻一区精品性色av| 国产精品无码久久久久| 囯产精品久久久久久久久蜜桃| 久久婷婷久久一区二区三区|