亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 1610560101.txt

?? c++ builder 的一些txt文檔
?? TXT
字號:

化境編程界-
標準模板庫STL介紹(1)
 
 
  
  化境編程界首頁| 化境軟件庫 | 化境教程庫 | 其它資源 | 化境討論區
| 化境留言板
 
 
  
  
   
showTop();
  
 
 
  歡迎訪問《化境編程界》| * Email:5xsoft@21cn.com | < 留言板
 
  化境編程界 ->  技術文章 ->  C/C++/VC    
標準模板庫STL介紹(1)
 [ 作者: 不詳
  添加時間: 2001-5-16 10:57:38
 ]
 
   標準模板庫,也叫 STL,是一個 C++ 容器類庫,算法和迭代器。他提供許多基本算法,數據結構。STL 是一個通用庫,即可以充份定制:幾乎所有的 STL 組件都是模板。在你使用 STL 前,你必須了解模板的工作情況。 
容器和算法
和許多類庫一樣,STL 包含容器類 - 可以包含其他對象的類。STL 包含向量類,鏈表類,雙向隊列類,集合類,圖類,等等。他們中的每個類都是模板,能包含各種類型的對象。例如,你可以用 vector<int> ,就象常規的 C 語言中的數組,除了 vector 不要你象數組那樣考慮到動態內存分配的問題。
   vector<int> v(3);      // 定義一個有三個元素的向量類
   v[0] = 7;
   v[1] = v[0] + 3;
   v[2] = v[0] + v[1];     // v[0] == 7, v[1] == 10, v[2] == 17 
STL 還包含了大量的算法。他們巧妙地處理儲存在容器中的數據。你能夠顛倒 vector 中的元素,只是簡單使用 reverse 算法。
   reverse(v.begin(), v.end()); // v[0] == 17, v[1] == 10, v[2] == 7
在調用 reverse 的時候有兩點要注意。首先,他是個全局函數,而不是成員函數。其次,他有兩個參數,而不是一個:他操作一定范圍的元素而不是操作容器。 在這個例子中他正好是對整個容器 V 操作。
以上兩點的原因是相同的:reverse 和其他 STL 算法一樣,他們是通用的,也就是說, reverse 不僅可以用來顛倒向量的元素,也可以顛倒鏈表中元素的順序。甚至可以對數組操作。下面的程序是合法的。
   double A[6] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7 };
   reverse(A, A + 6);
   for (int i = 0; i < 6; ++i)
    cout << "A[" << i << "] = " << A[i];
這個例子也用到了范圍,和我們上面的向量的例子一樣:第一個參數是指向要操作的范圍的頭的指針,第二個參數是指向尾的指針。在這里,范圍是 [A, A + 6)。可能你注意到范圍的不對稱。
迭代器
在上面的 C 數組的例子中,reverse 的參數類型是 double*。那么在 向量 或鏈表中參數又是什么呢?也就是說,究竟 reverse 是如何定義參數的,并且 v.begin() 和 v.end() 返回什么?
問題的答案是 reverse 的參數是 迭代器 (iterators)。他是指針的概括。指針自己也是迭代器。這也是為什么可以顛倒數組中元素的順序的原因。同樣地,向量 定義了嵌套的類型 iterator 和 const_iterator。在上面的例子中, v.begin() 和 v.end() 返回的類型是 vector<int>::iterator。還有一些迭代器,如 istream_iterator 和 ostream_iterator。他們根本不能和容器關聯。
迭代器的出現讓算法和容器的分離成為可能。算法是模板,其類型依賴于迭代器,因此不會局限于單一的容器。例如,我們寫個算法實現在一定范圍的線性查找。下面就是 STL 的 find 算法。
   template <class InputIterator, class T>
   InputIterator find(InputIterator first, InputIterator last, const T& value) {
     while (first != last && *first != value) ++first;
     return first;
   }
Find 有三個參數:兩個迭代器定義范圍,第三個是要查找的值。他遍歷范圍 [first, last),從頭到尾的處理,在找到后停止或到范圍的最后停止。
First 和 last 定義為 InputIterator 類型,而 InputIterator 是個模板參數。也就是說,實際上沒有一個真實的類型 InputIterator:當你調用 find 時,編譯器用實際的類型去匹配 InputIterator 和 T。如果 find 的兩個參數中第一個實現是 int*,第三個實現是 int,那么你可以認為是在執行下面的函數。
   int* find(int* first, int* last, const int& value) {
     while (first != last && *first != value) ++first;
     return first;
   }
約束和類屬實參
對于函數模板 (不僅僅是 STL 算法) 來說,一個非常重要的問題是:用什么樣的參數類型去匹配模板參數才正確?為詳細說明這個問題,我們舉例:顯然,int* 或 double* 能夠代替 find 的模板參數 InputIterator。而 int 或 double 則不行。因此,有個顯然的答案是:find 隱含地定義了對于類型的要求。無論用什么類型來實現 InputIterator,都必須提供一定的操作:他必須能夠比較兩個對象的大小,他必須能夠進行增加操作。
Find 不是僅有的一個有如此要求的 STL 算法。for_each 和 count 以及其他算法,都要滿足上面的要求。這些要求很重要,所以我們給他取個名字:我們將這一類類型條件叫約束 (concept)。我們稱上面的約束為 Input Iterator。如果一個類型滿足所有的要求,那么我們說這個類型符合該約束,或者說他是該約束的類屬實參 (Model)。我們說 int* 是 Input Iterator 的類屬實參,因為 int* 能提供 Input Iterator 所要求的所有操作。
約束可不是 C++ 語言的一部份,在一個程序中你沒有辦法去定義一個約束,或者定義某類型是約束的類屬實參。然而,約束是 STL 中的很重要的一部份。使用約束類屬機制讓我們在程序中從程序實現中分離接口成為可能。find 的作者只要考慮接口只針對于 Input Iterator 而不是去實現符合該約束的所有可能數據類型。同樣,如果你要用 find,那么你只要確定你傳遞的參數是 Input Iterator 的類屬實參就可以了。這就是為什么 find 和 reverse 能夠在 list, vector, C 數組合其他類型中使用。用約束(的思想)去編程,而不是固定于某一特定類型,讓程序重用組件和將組件組合使用。
Refinement
Input Iterator 實際上是相當弱的約束。也就是說,他只有少數幾個要求。一個 Input Iterator 必須支持指針運算的子集(他必須能夠通過操作符 operator++ 來增加 Input Iterator ),但是不需要其支持所有的指針算法。這對于 find 來說足夠了,但是其他的一些算法就不是這樣的,他們需要滿足另外的條件。例如 Reverse 還要能夠支持操作符 --。用術語來說,就是 reverse 的參數要是 Bidirectional Iterator 而非 Input Iterator。
Bidirectional Iterator 的約束和 Input Iterator 的約束很相近:他只是簡單地增加了一點另外的條件。Bidirectional Iterator 的類屬實參是 Input terator 類屬實參的子集:每個是 Bidirectional Iterator 類屬實參的數據類型都是 Input Iterator 的類屬實參。例如 Int* 即是 Bidirectional Iterator 的類屬實參,也是 Input Iterator 的類屬實參。但是 istream_iterator就不同了,他只是 Input Iterator 的類屬實參:他不能“適應”更嚴格的 Bidirectional Iterator 的要求。
我們這樣來描述 Input Iterator 和 Bidirectional Iterator 的關系: Bidirectional Iterator 是 Input Iterator 的 refinement。約束的 refinement 非常象 C++ 類的繼承。我們用不同的詞的主要原因是 refinement 用于約束而不是實際的類型。
除了我們上面提到的兩個迭代器約束外,還有三個迭代器約束。這五個迭代器 約束是: Output Iterator, Input Iterator, Forward Iterator, Bidirectional Iterator 和 Random Access Iterator。Forward Iterator 是 Input Iterator 的 refinement,Bidirectional Iterator 又是 Forward Iterator 的 refinement, Random Access Iterator 是 Bidirectional Iterator 的 refinement。(Output Iterator 和其他四個約束有關系,但是不是 refinement 層次上的關系:他不是其他四個的 refinement,其他四個也不是他的 refinement。)
   
   
  
   下一頁 8
 相關內容:
 
 
showBottom();
申明: 本站
 所有內容均是從網上收集,若有侵范你版權的請指出,本站馬上刪除。
 © Copyright By 稻香老農 2000.3 - Now | 站務聯系: 5xsoft@21cn.com | OICQ:593737 (只用于站務聯系,不做它用)
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

成人美女视频在线看| 欧美aaaaaa午夜精品| www国产精品av| 精品美女被调教视频大全网站| 色婷婷精品久久二区二区蜜臀av | 精品1区2区在线观看| 欧美精品在线一区二区三区| 欧美色图12p| 911国产精品| 日韩精品专区在线影院观看| 欧美久久久久久久久久| 欧美久久久久久久久久| 日韩小视频在线观看专区| 欧美r级电影在线观看| 久久久久久久久久美女| 国产精品的网站| 亚洲精品福利视频网站| 五月天精品一区二区三区| 亚洲va中文字幕| 久久精品国产一区二区三 | 日韩精品一区二区三区老鸭窝| 日韩午夜激情视频| 久久人人爽爽爽人久久久| 国产精品日日摸夜夜摸av| 一个色综合网站| 丝袜美腿高跟呻吟高潮一区| 久久国产福利国产秒拍| 成人免费毛片嘿嘿连载视频| 91国产免费观看| 欧美第一区第二区| 1区2区3区欧美| 视频一区在线播放| 成人免费视频视频在线观看免费 | 欧美一区二区在线看| 国产人久久人人人人爽| 亚洲精品自拍动漫在线| 日韩电影在线一区二区三区| 国产精品亚洲а∨天堂免在线| 色婷婷久久久亚洲一区二区三区 | 成av人片一区二区| 欧美男男青年gay1069videost| 久久免费精品国产久精品久久久久| 亚洲欧洲成人自拍| 久草这里只有精品视频| 91首页免费视频| 欧美精品一区二区三区蜜臀| 亚洲欧美另类在线| 国产经典欧美精品| 777奇米成人网| 亚洲人xxxx| 狠狠色狠狠色综合日日91app| 91蝌蚪国产九色| 久久久久国产一区二区三区四区 | 六月丁香婷婷色狠狠久久| 91看片淫黄大片一级在线观看| 欧美精品一区二区三区久久久| 一区二区免费视频| 99久久精品免费看国产| 久久综合久久鬼色中文字| 日韩黄色小视频| 在线观看一区二区精品视频| 国产精品素人视频| 国产精品中文字幕日韩精品| 3atv在线一区二区三区| 亚洲成av人**亚洲成av**| 99久久精品免费看国产免费软件| 亚洲精品一区二区三区在线观看| 天天影视涩香欲综合网 | 亚洲午夜一二三区视频| 91在线视频播放| 国产精品传媒入口麻豆| 国产精品资源网| 久久久国际精品| 国产在线视频一区二区三区| 精品国产自在久精品国产| 日韩精品91亚洲二区在线观看| 91精品办公室少妇高潮对白| 一区二区激情视频| 色婷婷av一区| 一区二区免费看| 欧美巨大另类极品videosbest | 精品亚洲成a人| 欧美不卡激情三级在线观看| 麻豆精品久久精品色综合| 欧美成人国产一区二区| 国产综合成人久久大片91| 国产亚洲一区字幕| av电影天堂一区二区在线观看| 中文字幕成人在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 91捆绑美女网站| 亚洲国产精品自拍| 91精品国产综合久久精品图片| 免费欧美日韩国产三级电影| 精品电影一区二区| 成人免费三级在线| 亚洲色图视频网站| 欧美老人xxxx18| 国产乱码精品一区二区三区忘忧草| 国产欧美在线观看一区| 色中色一区二区| 日韩精品91亚洲二区在线观看| 2023国产精品| 91网上在线视频| 日韩电影在线观看网站| 国产日本欧洲亚洲| 欧美视频一区在线观看| 久久99国产精品久久99 | 亚洲视频香蕉人妖| 欧美一级黄色大片| 波多野结衣中文一区| 亚洲高清免费视频| 久久久久久电影| 在线精品视频一区二区| 麻豆精品在线播放| 亚洲欧美日韩小说| 欧美成人精品二区三区99精品| av亚洲精华国产精华| 麻豆91在线播放| 亚洲精品成人a在线观看| 欧美成人三级在线| 欧美特级限制片免费在线观看| 国产在线麻豆精品观看| 亚洲一区二区3| 中文字幕永久在线不卡| 精品国产一区二区国模嫣然| 日本大香伊一区二区三区| 精品一区二区三区在线视频| 亚洲综合视频在线观看| 亚洲国产高清在线| 2024国产精品| 日韩午夜av一区| 欧美日韩一区二区在线观看视频| 成人小视频在线观看| 麻豆国产精品官网| 日韩影视精彩在线| 一级精品视频在线观看宜春院| 国产精品无遮挡| 久久蜜桃av一区精品变态类天堂| 日韩一区二区三| 欧美日本国产视频| 欧美日韩一区小说| 欧美色图免费看| 欧洲精品一区二区三区在线观看| www..com久久爱| 成人动漫精品一区二区| 国产大陆a不卡| 国产一区二区三区四区五区入口| 琪琪一区二区三区| 青青草视频一区| 亚洲香肠在线观看| 亚洲一区二区欧美激情| 一区二区三区**美女毛片| 亚洲欧洲制服丝袜| 亚洲人成网站在线| 亚洲欧美日本在线| 一区二区三区欧美在线观看| 亚洲精品免费在线播放| 亚洲免费av网站| 亚洲伊人伊色伊影伊综合网| 一级中文字幕一区二区| 亚洲电影第三页| 免费成人在线视频观看| 国产在线观看一区二区| 国产精品亚洲第一区在线暖暖韩国 | 色综合色综合色综合| 在线免费亚洲电影| 欧美日韩在线精品一区二区三区激情 | 色呦呦日韩精品| 欧美视频一区在线| 日韩视频中午一区| 久久你懂得1024| 亚洲视频中文字幕| 日产欧产美韩系列久久99| 久久国产尿小便嘘嘘尿| 粉嫩av一区二区三区在线播放 | 国产亚洲欧美日韩日本| 久久久高清一区二区三区| 国产精品久久久久久久蜜臀| 亚洲乱码精品一二三四区日韩在线| 亚洲精品一二三四区| 免费日本视频一区| 成人国产免费视频| 欧美剧在线免费观看网站| 久久久亚洲欧洲日产国码αv| 亚洲啪啪综合av一区二区三区| 亚洲成人av在线电影| 国产一区二区福利视频| 色欧美乱欧美15图片| 欧美一区二区免费视频| 天堂一区二区在线| 久久精品国产免费| 91丝袜美女网| 精品久久久久久久久久久院品网 | 欧美卡1卡2卡| 国产精品色噜噜| 秋霞午夜av一区二区三区| 99热在这里有精品免费| 日韩欧美在线综合网| 亚洲欧美日韩综合aⅴ视频|