面向?qū)ο蠓盒图夹g(shù)_第1頁(yè)
面向?qū)ο蠓盒图夹g(shù)_第2頁(yè)
面向?qū)ο蠓盒图夹g(shù)_第3頁(yè)
面向?qū)ο蠓盒图夹g(shù)_第4頁(yè)
面向?qū)ο蠓盒图夹g(shù)_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、面向?qū)ο笤O(shè)計(jì)方法面向?qū)ο笤O(shè)計(jì)方法n9.1 泛型簡(jiǎn)介n9.2 C+中的泛型n9.3 STLn9.4 JAVA中的泛型n9.5 C+和JAVA中泛型的比較n9.6 泛型的好處第九章第九章 泛型技術(shù)泛型技術(shù)1.1.泛型泛型 泛型(Generic),是指具有在多種數(shù)據(jù)類(lèi)型上皆可操作的含意 。既編寫(xiě)的代碼可以在不同的數(shù)據(jù)類(lèi)型上重用。 實(shí)現(xiàn)對(duì)源代碼進(jìn)行重用,既不是通過(guò)繼承和聚合重用對(duì)象代碼 ,也不是代碼的復(fù)制粘貼復(fù)用。 泛型編程(Generic Programming) 9.1 9.1 泛型簡(jiǎn)介泛型簡(jiǎn)介9.2.1 C+中泛型簡(jiǎn)介 在C+語(yǔ)言中稱(chēng)泛型為模板(template),模板由函數(shù)模板和類(lèi)模板兩部分組

2、成,以所處理的數(shù)據(jù)類(lèi)型的說(shuō)明作為參數(shù)的函數(shù)叫做函數(shù)模板,而以所處理的數(shù)據(jù)類(lèi)型的說(shuō)明作為參數(shù)的類(lèi)就叫類(lèi)模板。9.2 C+9.2 C+中的泛型中的泛型1. 示例:加法函數(shù)的重載int Add( int a, int b ) return a + b ;long Add(long a, long b ) return a + b ; 根據(jù)不同的數(shù)據(jù)類(lèi)型進(jìn)行多次重載,但是實(shí)現(xiàn)的代碼都是一致的。.2 函數(shù)模板函數(shù)模板2. 函數(shù)模板的語(yǔ)法template Type Add( Type a, Type b ) return a + b ; 具體使用為:Add(10,100);Add(10.1

3、,23.4);.2 函數(shù)模板函數(shù)模板template : 關(guān)鍵字,總是放在模板的定義與聲明的最前面 : 模板參數(shù)列表,如果有多個(gè)模板參數(shù)用逗號(hào)隔開(kāi);模板參數(shù)分模板類(lèi)型參數(shù)和模板非類(lèi)型參數(shù)(代表一個(gè)常量表達(dá)式)。class:關(guān)鍵字, 聲明模板類(lèi)型參數(shù),用typename替代也可以。.2 函數(shù)模板函數(shù)模板template 例如:template Type Add( Type a, TypeB b ) return a + b ; 注意此時(shí)a和b是兩種不同的變量類(lèi)型.2 函數(shù)模板函數(shù)模板例如:template Type Add( Type a) ret

4、urn a + size ; 注意此時(shí)a是模板類(lèi)型參數(shù),而size是模板非類(lèi)型參數(shù)。模板非類(lèi)型參數(shù)是常整數(shù)(包括枚舉值)或者指向外部鏈接對(duì)象的指針,不能是浮點(diǎn)數(shù)和類(lèi)對(duì)象。.2 函數(shù)模板函數(shù)模板例如:template Type Add( Type a , int size) return a + size ; 注意此時(shí)a是模板類(lèi)型參數(shù),而size是函數(shù)參數(shù).2 函數(shù)模板函數(shù)模板3. 模板函數(shù)的實(shí)例化 用系統(tǒng)實(shí)際的內(nèi)置或用戶(hù)定義類(lèi)型將替換模板的類(lèi)型參數(shù)。 具體見(jiàn)源代碼示例。注意: 不論是內(nèi)置類(lèi)型還是用戶(hù)自定義類(lèi)型必須要支持模板函數(shù)內(nèi)的操作。.2 函數(shù)

5、模板函數(shù)模板1.1.示例示例: List鏈表的實(shí)現(xiàn)鏈表的實(shí)現(xiàn)class ListIntpublic:void Add(int nValue);bool Insert(int nIndex, int nValue);int Remove(int nIndex); 只能滿(mǎn)足整型鏈表的要求,要根據(jù)不同的數(shù)據(jù)類(lèi)型編寫(xiě)多個(gè)鏈表類(lèi)。9.2.3 9.2.3 類(lèi)模板類(lèi)模板2.類(lèi)模板的定義template class Listpublic:void Add(T nValue);bool Insert(int nIndex, T nValue);T Remove(int nIndex);9.2.3 9.2.3 類(lèi)

6、模板類(lèi)模板3. 類(lèi)模板方法的實(shí)現(xiàn)方式template void List :Add(T nValue).9.2.3 9.2.3 類(lèi)模板類(lèi)模板4. 類(lèi)模板的實(shí)例化 用系統(tǒng)實(shí)際的內(nèi)置或用戶(hù)定義類(lèi)型將替換模板的類(lèi)型參數(shù)。List intList;List douList;注意: 不論是內(nèi)置類(lèi)型還是用戶(hù)自定義類(lèi)型必須要支持類(lèi)模板內(nèi)的操作。9.2.3 9.2.3 類(lèi)模板類(lèi)模板9.3.1 STL簡(jiǎn)介簡(jiǎn)介1. STL的含義的含義 STL:Standard Template Library,標(biāo)準(zhǔn)模板庫(kù),STL是泛型編程的實(shí)現(xiàn)品;STL就是一個(gè)數(shù)據(jù)結(jié)構(gòu)和算法框架。 STL的設(shè)計(jì)目標(biāo)就是將不同的算法和數(shù)據(jù)結(jié)構(gòu)結(jié)合

7、起來(lái),并獲得最佳效率。9.3 STL9.3 STL2. STL與與C+標(biāo)準(zhǔn)程序庫(kù)標(biāo)準(zhǔn)程序庫(kù) STL于1994年被納入C+標(biāo)準(zhǔn)程序庫(kù)。STL雖然加入C+標(biāo)準(zhǔn)庫(kù)的時(shí)間相對(duì)較晚,但它卻是C+標(biāo)準(zhǔn)程序庫(kù)中最具革命性的部分,同時(shí)也是C+標(biāo)準(zhǔn)程序庫(kù)中最重要的組成部分。9.3.1 STL簡(jiǎn)介3. STL內(nèi)容 STL的代碼從廣義上講分為三類(lèi): container(容器)、algorithm(算法)和iterator(迭代器),幾乎所有的代碼都采用了模板類(lèi)和模板函數(shù)的方式。9.3.1 STL簡(jiǎn)介容器 對(duì)最常用的數(shù)據(jù)結(jié)構(gòu)提供了支持 :vector,list,set,map,stack和queue 。 遺憾的是標(biāo)準(zhǔn)

8、中沒(méi)有支持哈希表。9.3.1 STL簡(jiǎn)介算法 STL提供了大約100個(gè)實(shí)現(xiàn)算法的模版函數(shù) 。其中常用到的功能范圍涉及到比較、交換、查找、遍歷操作、復(fù)制、修改、移除、反轉(zhuǎn)、排序、合并等等。9.3.1 STL簡(jiǎn)介迭代器 迭代器在STL中用來(lái)將算法和容器聯(lián)系起來(lái),起著一種黏和劑的作用。幾乎STL提供的所有算法都是通過(guò)迭代器存取元素序列進(jìn)行工作的,每一個(gè)容器都定義了其本身所專(zhuān)有的迭代器,用以存取容器中的元素。 9.3.1 STL簡(jiǎn)介1. 命名空間命名空間(namespace)std 當(dāng)你采用不同的模塊和程序庫(kù)時(shí),經(jīng)常會(huì)出現(xiàn)名稱(chēng)沖突現(xiàn)象,這是因?yàn)椴煌哪K和程序庫(kù)可能針對(duì)不同的對(duì)象使用相同的標(biāo)識(shí)符. n

9、amespace可以解決該問(wèn)題。 C+標(biāo)準(zhǔn)程序庫(kù)中所以的標(biāo)識(shí)符都統(tǒng)一到std這個(gè)命名空間。9.3.2 幾個(gè)基本概念 使用c+標(biāo)準(zhǔn)程序庫(kù)的標(biāo)識(shí)符有三種方法可供選擇:1 直接指定標(biāo)識(shí)符使用std:cout std:hex 3.4 使用使用using declaration ,在文件頭處申明,在文件頭處申明如下:如下:using std:cout;using std:endl;cout std:hex 3.4 使用使用using declaration ,在文件頭處申明,在文件頭處申明如下:如下:using std:cout;using std:endl;cout std:hex 3.4 使用使用u

10、sing directive ,在文件頭處申明如,在文件頭處申明如下:下:using namespace std;cout hex 3.4 endl; 這種使用方式最簡(jiǎn)單,所有在使用該標(biāo)識(shí)這種使用方式最簡(jiǎn)單,所有在使用該標(biāo)識(shí)符,都不需要添加符,都不需要添加“std:”,但在大程序中可,但在大程序中可能會(huì)出現(xiàn)命名沖突。能會(huì)出現(xiàn)命名沖突。9.3.2 幾個(gè)基本概念2. 頭文件頭文件 C+標(biāo)準(zhǔn)程序庫(kù)中頭文件沒(méi)有擴(kuò)展名,使用如下: #include #include 為了向下兼容,你也可以使用舊式的C+頭文件: #include 9.3.2 幾個(gè)基本概念3. 配置器配置器(Allocators) 配置器

11、用于處理內(nèi)存配置和尋址,是一種特定的內(nèi)存模型。9.3.2 幾個(gè)基本概念1. 容器的分類(lèi)容器的分類(lèi)9.3.3 STL容器序列式容器序列式容器 每個(gè)元素均有固定的位置每個(gè)元素均有固定的位置-取決于插入的取決于插入的時(shí)機(jī)和地點(diǎn),和元素值無(wú)關(guān)。時(shí)機(jī)和地點(diǎn),和元素值無(wú)關(guān)。STL提供了提供了vector、list和和deque三個(gè)序列式容器。三個(gè)序列式容器。關(guān)聯(lián)式容器關(guān)聯(lián)式容器 元素位置取決于特定的排序準(zhǔn)則和元素值,元素位置取決于特定的排序準(zhǔn)則和元素值,和插入次序無(wú)關(guān)。和插入次序無(wú)關(guān)。STL提供了四個(gè)關(guān)聯(lián)式容器:提供了四個(gè)關(guān)聯(lián)式容器:set、multiset、map和和multimap。9.3.3 STL

12、容器2. vector Vector將其元素置于一個(gè)動(dòng)態(tài)數(shù)組中加以將其元素置于一個(gè)動(dòng)態(tài)數(shù)組中加以管理:它允許隨機(jī)存取,也就是說(shuō)你可以利用管理:它允許隨機(jī)存取,也就是說(shuō)你可以利用索引直接存取任何一個(gè)元素。索引直接存取任何一個(gè)元素。 在數(shù)組尾部增加元素或移除元素均非常快在數(shù)組尾部增加元素或移除元素均非??焖?,但是在中部或頭部安插元素就比較費(fèi)事。速,但是在中部或頭部安插元素就比較費(fèi)事。 (見(jiàn)示例見(jiàn)示例)9.3.3 STL容器3. deque deque: double-ended queue, 雙端隊(duì)列。雙端隊(duì)列。它也是一個(gè)動(dòng)態(tài)數(shù)組,但是可以向兩端發(fā)展,它也是一個(gè)動(dòng)態(tài)數(shù)組,但是可以向兩端發(fā)展,因此無(wú)

13、論先頭部還是尾部安插元素都是非常迅因此無(wú)論先頭部還是尾部安插元素都是非常迅速。但如果在中間插入數(shù)據(jù)比較費(fèi)事,因?yàn)橐?。但如果在中間插入數(shù)據(jù)比較費(fèi)事,因?yàn)橐苿?dòng)其他元素。移動(dòng)其他元素。 (見(jiàn)示例見(jiàn)示例)9.3.3 STL容器4. list list, 雙向鏈表,每個(gè)元素都有其前趨元素雙向鏈表,每個(gè)元素都有其前趨元素和后繼元素。和后繼元素。List不提供隨機(jī)存取,但是其在不提供隨機(jī)存取,但是其在任何位置插入或刪除元素速度快,效率高。任何位置插入或刪除元素速度快,效率高。 (見(jiàn)示例見(jiàn)示例)9.3.3 STL容器5. set set的內(nèi)部元素依據(jù)其值自動(dòng)排序,每個(gè)元的內(nèi)部元素依據(jù)其值自動(dòng)排序,每個(gè)元素

14、值只能出現(xiàn)一次,不允許重復(fù)。素值只能出現(xiàn)一次,不允許重復(fù)。6. Multiset 和和set相同,只不過(guò)它允許重復(fù)元素。相同,只不過(guò)它允許重復(fù)元素。7.Map map的元素都是的元素都是“實(shí)值實(shí)值/鍵值鍵值”所形成的一所形成的一個(gè)對(duì)組,每個(gè)元素有一個(gè)鍵,是排序的基礎(chǔ)。個(gè)對(duì)組,每個(gè)元素有一個(gè)鍵,是排序的基礎(chǔ)。8. Multimap 和和map相同,只是允許重復(fù)鍵值。相同,只是允許重復(fù)鍵值。 9.3.3 STL容器1. STL容器的共同能力容器的共同能力 1 所有容器提供的都是所有容器提供的都是“Value語(yǔ)意語(yǔ)意”而非而非“reference語(yǔ)意語(yǔ)意”。也就是說(shuō)容器進(jìn)行。也就是說(shuō)容器進(jìn)行元素安插

15、操作時(shí),內(nèi)部實(shí)施的是拷貝操作,置元素安插操作時(shí),內(nèi)部實(shí)施的是拷貝操作,置于容器內(nèi)。因此于容器內(nèi)。因此STL容器的每一個(gè)元素都必須容器的每一個(gè)元素都必須能夠被拷貝。能夠被拷貝。-拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)。 2 每個(gè)容器都有迭代器,利用迭代器就每個(gè)容器都有迭代器,利用迭代器就可以遍歷容器里的每個(gè)元素。可以遍歷容器里的每個(gè)元素。 9.3.4 容器的共同能力和操作 3 一般而言,各項(xiàng)操作并非絕對(duì)安全。一般而言,各項(xiàng)操作并非絕對(duì)安全。調(diào)用者必須確保傳給操作函數(shù)的參數(shù)符合需求。調(diào)用者必須確保傳給操作函數(shù)的參數(shù)符合需求。違反這些需求違反這些需求(例如使用非法索引例如使用非法索引)會(huì)導(dǎo)致未定會(huì)導(dǎo)致未定義的行為

16、。義的行為。 9.3.4 容器的共同能力和操作2. STL容器的共同操作容器的共同操作n初始化初始化n與大小相關(guān)的函數(shù)與大小相關(guān)的函數(shù)n比較比較n賦值賦值 9.3.4 容器的共同能力和操作提供容器默認(rèn)初始化的構(gòu)造函數(shù)。通常每個(gè)容提供容器默認(rèn)初始化的構(gòu)造函數(shù)。通常每個(gè)容器都有幾個(gè)不同的構(gòu)造函數(shù),提供容器不同器都有幾個(gè)不同的構(gòu)造函數(shù),提供容器不同的初始化方法的初始化方法將容器初始化為現(xiàn)有同類(lèi)容器副本的構(gòu)造函數(shù)將容器初始化為現(xiàn)有同類(lèi)容器副本的構(gòu)造函數(shù)撤消容器時(shí),進(jìn)行內(nèi)存處理撤消容器時(shí),進(jìn)行內(nèi)存處理判容器是否為空,空返回判容器是否為空,空返回true,true,不空返回不空返回falsefalse返回

17、容器中最多允許的元素量返回容器中最多允許的元素量返回容器當(dāng)前元素量返回容器當(dāng)前元素量默認(rèn)構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)析構(gòu)函數(shù)析構(gòu)函數(shù)empty()empty()max_size()max_size()size()size()說(shuō)明說(shuō)明標(biāo)準(zhǔn)庫(kù)容器共有的函數(shù)標(biāo)準(zhǔn)庫(kù)容器共有的函數(shù)將一個(gè)容器賦值拷貝給另一個(gè)同類(lèi)容器將一個(gè)容器賦值拷貝給另一個(gè)同類(lèi)容器交換兩個(gè)容器的元素交換兩個(gè)容器的元素如果前面的容器小于后面的容器,則返回如果前面的容器小于后面的容器,則返回true,否,否則返回則返回false,不適用于,不適用于priority_queue如果前面的容器小于等于后面的容器,則返回如果前面的

18、容器小于等于后面的容器,則返回true,否則返回,否則返回false,不適用于,不適用于priority_queue如果前面的容器大于后面的容器,則返回如果前面的容器大于后面的容器,則返回true,否,否則返回則返回false,不適用于,不適用于priority_queue如果前面的容器大于等于后面的容器,則返回如果前面的容器大于等于后面的容器,則返回true,否則返回,否則返回false,不適用于,不適用于priority_queue如果前面的容器等于后面的容器,則返回如果前面的容器等于后面的容器,則返回true,否,否則返回則返回false,不適用于,不適用于priority_queue如

19、果前面的容器不等于后面的容器,則返回如果前面的容器不等于后面的容器,則返回true,否則返回否則返回false,不適用于,不適用于priority_queueoperator=swap()operatoroperatoroperator=operator=operator!=說(shuō)明說(shuō)明標(biāo)準(zhǔn)庫(kù)容器共有的函數(shù)標(biāo)準(zhǔn)庫(kù)容器共有的函數(shù)獲得指向被控序列開(kāi)始處的迭代子,引用容器獲得指向被控序列開(kāi)始處的迭代子,引用容器第一個(gè)元素第一個(gè)元素獲得指向被控序列末端的迭代子,引用容器最獲得指向被控序列末端的迭代子,引用容器最后一個(gè)元素的后繼位置后一個(gè)元素的后繼位置獲得指向被控序列末端的反轉(zhuǎn)型迭代子,引用獲得指向被控序列

20、末端的反轉(zhuǎn)型迭代子,引用容器最后一個(gè)元素。實(shí)際上這是該容器前后容器最后一個(gè)元素。實(shí)際上這是該容器前后反轉(zhuǎn)之后的反轉(zhuǎn)之后的begin()獲得指向被控序列開(kāi)始處的反轉(zhuǎn)型迭代子,引獲得指向被控序列開(kāi)始處的反轉(zhuǎn)型迭代子,引用容器第一個(gè)元素的前導(dǎo)位置。實(shí)際上這是用容器第一個(gè)元素的前導(dǎo)位置。實(shí)際上這是該容器前后反轉(zhuǎn)之后的該容器前后反轉(zhuǎn)之后的end()從容器中清除一個(gè)或幾個(gè)元素從容器中清除一個(gè)或幾個(gè)元素從容器中清除所有元素從容器中清除所有元素begin()end()rbegin()rend()erase()clear()說(shuō)明說(shuō)明只在第一類(lèi)容器中的只在第一類(lèi)容器中的函數(shù)函數(shù) vector 容器要求其元素必須有

21、可賦值和可容器要求其元素必須有可賦值和可拷貝屬性??截悓傩?。1. 大小和容量大小和容量2. 操作函數(shù)操作函數(shù)3. 作為普通數(shù)組使用作為普通數(shù)組使用4. 異常處理異常處理5. 實(shí)例分析實(shí)例分析(見(jiàn)源代碼見(jiàn)源代碼)9.3.5 Vector 迭代器是一個(gè)可以遍歷迭代器是一個(gè)可以遍歷STL容器內(nèi)全部或容器內(nèi)全部或部分元素的對(duì)象。部分元素的對(duì)象。 支持支持* 、+、=、!、!= 、-、=操作符。操作符。 見(jiàn)示例見(jiàn)示例9.3.6 迭代器 STL提供了一些標(biāo)準(zhǔn)算法,包括搜尋、排提供了一些標(biāo)準(zhǔn)算法,包括搜尋、排序、拷貝、重新排序、修改、數(shù)值運(yùn)算等十分序、拷貝、重新排序、修改、數(shù)值運(yùn)算等十分基本而普遍的算法?;?/p>

22、本而普遍的算法。 算法并非容器類(lèi)型的成員函數(shù),而是一種算法并非容器類(lèi)型的成員函數(shù),而是一種搭配迭代器使用的全局函數(shù)。搭配迭代器使用的全局函數(shù)。 見(jiàn)示例。見(jiàn)示例。 9.3.7 算法算法分類(lèi)n變化序列算法ncopy ,remove,fill,replace,random_shuffle,swap, 會(huì)改變?nèi)萜鱪非變化序列算法:nadjacent-find, equal, mismatch,find ,count, search, count_if, for_each, search_nn以上函數(shù)模板都在 中定義n此外還有其他算法,比如中的算法算法示例:find()templateInIt find

23、(InIt first, InIt last, const find(InIt first, InIt last, const T& val);T& val); nfirst 和 last 這兩個(gè)參數(shù)都是容器的迭代器,它們給出了容器中的查找區(qū)間起點(diǎn)和終點(diǎn)。n這個(gè)區(qū)間是個(gè)左閉右開(kāi)的區(qū)間,即區(qū)間的起點(diǎn)是位于查找范圍之中的,而終點(diǎn)不是算法示例:find()nval參數(shù)是要查找的元素的值n函數(shù)返回值是一個(gè)迭代器。如果找到,則該迭代器指向被找到的元素。如果找不到,則該迭代器指向查找區(qū)間終點(diǎn)。#include #include #include using namespace std;main() int

24、 array10 = 10,20,30,40;vector v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);vector:iterator p;p = find(v.begin(),v.end(),3);if( p != v.end()cout * p endl;p = find(v.begin(),v.end(),9);if( p = v.end()cout not found endl;p = find(v.begin()+1,v.end()-2,1);if( p != v.end()cout * p endl;i

25、nt * pp = find( array,array+4,20);cout * pp endl;輸出:3not found320 幫助程序員防止幫助程序員防止“被異常拋出時(shí)發(fā)生資源被異常拋出時(shí)發(fā)生資源泄露泄露”。void f() ClassA* ptr = new ClassA(); try . catch (.) throw; delete ptr; 9.3.8 智能指針有錯(cuò)誤?正確為正確為void f() ClassA* ptr = new ClassA; try . catch (.) delete ptr; throw; delete ptr; 9.3.8 智能指針使用智能指針使用智

26、能指針#include void f()std:auto_ptr ptr(new ClassA);. 9.3.8 智能指針智能指針的使用方法智能指針的使用方法std:auto_ptr ptr1(new ClassA); /OKstd:auto_ptr ptr2 = new ClassA; /ERROR9.3.8 智能指針 可以當(dāng)著是一種特殊的可以當(dāng)著是一種特殊的vector容器。容器。9.3.9 string(字符串)使用使用STL技術(shù)修改技術(shù)修改main()函數(shù)中的代碼,函數(shù)中的代碼,使之成為異常安全的使之成為異常安全的Class Derivedpublic:void OnOpen()/這里

27、可能拋出異常這里可能拋出異常9.3.10 一道關(guān)于STL的面試題int main()Derived *pBase = NULL;pBase = new Derived();if (pBase != NULL)pBase- OnOpen();delete pBase;return 0;9.3.10 一道關(guān)于STL的面試題解決方法解決方法std:auto_ptr pBase(new Derived(); pBase-OnOpen(); 9.3.10 一道關(guān)于STL的面試題 STL僅僅是一個(gè)標(biāo)準(zhǔn),有很多公司實(shí)現(xiàn)了這個(gè)標(biāo)準(zhǔn),各具特點(diǎn)。 STLport 是一個(gè)跨平臺(tái)可移植版本 ,應(yīng)用比較廣泛。 http

28、:// 9.3.11 STL選擇 C+C+標(biāo)準(zhǔn)程序庫(kù)自修教程與參考手標(biāo)準(zhǔn)程序庫(kù)自修教程與參考手冊(cè)冊(cè) 泛型編程與泛型編程與STLSTL STL STL 源碼剖析源碼剖析 Effective STL Effective STL (STLSTL高效編程高效編程 ) C+ C+ 設(shè)計(jì)新思維設(shè)計(jì)新思維 9.3.12 C+泛型書(shū)籍推薦1. JDK1.4 1. JDK1.4 和和JDK1.5JDK1.5部分函數(shù)比較部分函數(shù)比較n 類(lèi)類(lèi)ArrayListArrayListn 接口接口Comparable Comparable 9.4 JAVA中的泛型2. 2. 泛型方法和泛型類(lèi)的聲明泛型方法和泛型類(lèi)的聲明public class Pair public class Pair . . . public T getMiddle(T a) 9.4 JAVA中的泛型3. 3. 類(lèi)型變量的限定類(lèi)型變量的限定 有時(shí)候類(lèi)和方法需要類(lèi)型變量進(jìn)有時(shí)候類(lèi)和方法需要類(lèi)型變量進(jìn)行一定的限制。行一定的限制。 例如:例如:9.4 JAVA中的泛型class ArrayAlg public static T min(T a) if (a = null | a.length = 0) return null; T smallest = a0; for (int i =

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論