第十一章 泛型演算法

2022-04-20 01:43:37 字數 1767 閱讀 9241

1:演算法

find,count:讀演算法,標頭檔案algorithm;

copy, replace,replace_copy:寫演算法,標頭檔案algorithm;

find_first_of,accumulate:讀演算法,標頭檔案numeric;

fill,fill_n:寫演算法,標頭檔案xutility;

back_inserter:寫演算法,標頭檔案iterator;

2:演算法不改變容器的大小,真理在於讓演算法獨立於容器,而達到普遍性,泛性,使得設計更為簡單

3: 理解下面程式**:

istream_iterator in_iter(cin); //

read ints from cin

istream_iterator eof; //

istream "end" iterator

//read until end of file, storing what was read in vec

while (in_iter !=eof)

//increment advances the stream to the next value

//dereference reads next value from the istream

vec.push_back(*in_iter++);

對於istream_iterator in_iter(cin); 表示構建了乙個流輸入迭代器,且通過cin將該迭代器已經準備好了,只要解引用則就可以將輸入資料獲取到返回來。比如此時用*in_iter時會將流中第乙個元素輸入其中;但是留意的是*in_iter是獲取流中資料返回其值;若在解引用時發現流中沒有資料,自然會告訴流,讓流提示客戶輸入資料。

對於*in_iter++操作,其實質是*in_iter ;in_iter++;而在定義流迭代器時,就已經準備好乙個資料待接收了;故而在*in_iter提示接收資料,而在in_iter++還會提示接收資料,因為迭代器指向此流時沒有資料。驗證:int c=*in_iter;in_iter++;c=*in_iter;第乙個會提示輸入,是因為in_iter迭代器指向的流沒有資料需要輸入;而第二將迭代器轉下乙個時,發現沒有任何資料對應,故而提示客戶輸入資料;而在第3個語句時,由於只是解引用,而此處的迭代器所指流是有資料的,故而不需要提示輸入了。

其整個過程實質是指:定義迭代器時,已經有輸入了,只是由於是定義,且沒有使用其中資料,故而沒有提示;因此第乙個解引用就會提示輸入;後面的只要迭代器指向下個,則就該填入所指處的值,故而需要提示輸入。

對於*in_iter++操作過程還得考慮優先順序問題,是先執行in_iter++;後執行*in_iter;因此,假設輸入1 2 ;則先將1收入,且移動後將2也收入了,而*in_iter是將第乙個迭代器解引用了,故而可以獲取其中的值;但是到下一次迴圈時,in_iter++則由於沒有資料了,故而需要提示輸入,則只有輸入了,才會*in_iter獲得2值;故而輸入是1 2 \n ctl+z \n 輸出才會是1 2;

1 2

1--獲取1

ctl+z

2--獲取2

明顯語句:

istream_iteratoritin(cin);

istream_iterator

itin1(cin);

istream_iterator

eof;

while(itin!=eof)

可以看到輸入是1 2 3 時,只是獲得了1 3 ,因為2 已經被itin1獲取了。

4:對於list物件,應該優先使用list容器特有的成員版本,而不是泛型演算法。

第十一章 泛型

1 泛型概述 使用泛型可以創造出更靈活的類,定義這種引數化類,可以使內部演算法相同,但資料型別會跟隨型別引數而變。優點 型別安全 指定型別引數後,編譯時會進行型別檢查。效能優化 減少效能消耗,避免裝箱和拆箱操作。重用 避免編寫大量重複的 2 泛型類的使用 2.1 定義泛型類 public class...

c Primier 第十一章 泛型演算法

使用泛型演算法必須包含algorithm標頭檔案 include 標準庫還定義了一組泛化的算術演算法,使用這些演算法則必須包含numberic標頭檔案 include int sum accumulate vec.begin vec.end 42 find first of size t cnt l...

modern c design 第十一章

本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...