《C++Primer》第11章學(xué)習(xí)筆記_第1頁
《C++Primer》第11章學(xué)習(xí)筆記_第2頁
《C++Primer》第11章學(xué)習(xí)筆記_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

1、C+ Primer第11章學(xué)習(xí)筆記第 11 章:泛型算法 標(biāo)準(zhǔn)庫提供一組不依賴特定的容器類型的算法作用在不同類型的容器和不同類型的元 素上。學(xué)習(xí)摘錄 1 1 3:算法重要性質(zhì) 算法也許會改變存儲在容器中的元素的值,也許會在容器內(nèi)移動元素。 但是,算法從不直接添加或刪除元素。 如果需要添加或刪除元素, 則必須使用容器操作。第二節(jié):初窺算法 #include <algorithm>/ 使用泛型算法 #include <numeric>/ 泛化的算術(shù)算法( generalized numeric algorithm )學(xué)習(xí)摘錄 1 1 4:迭代器實參類型 大多數(shù)算法(前兩個參

2、數(shù)指定范圍) : 通常:泛型算法都是在標(biāo)記容器(或其他序列)內(nèi)的元素范圍的迭代器上操作的。標(biāo)記范圍的兩個實參類型必須精確匹配,而迭代器本身必須標(biāo)記一個范圍: 它們必須指向同一個容器中的元素(或者超出容器末端的下一位置) , 并且如果兩者不相等,則第一個迭代器通過不斷地自增,必須可以到達(dá)第二個迭代器。 有些算法(帶有兩對迭代器參數(shù))每對迭代器中,兩個實參的類型必須精確匹配,但不要求兩對之間的類型匹配。 當(dāng)元素存儲在不同類型的序列中時,只要這兩個序列中的元素可以比較即可。第三節(jié):再談迭代器C+語言還提供了另外三種迭代器學(xué)習(xí)摘錄 1 1 5:三種容器的簡單介紹插入迭代器(insert iterato

3、r):這類迭代器與容器綁定在一起,實現(xiàn)在容器中插入元素 的功能。 iostream 迭代器( iostream iterator ):這類迭代器可與輸入或輸出流綁定在一起,用于 迭代遍歷所關(guān)聯(lián)的 IO 流。反向迭代器(reverse iterator):這類迭代器實現(xiàn)向后遍歷,而不是向前遍歷。學(xué)習(xí)摘錄 116:三種插入迭代器這里有三種插入器,其差別在于插入元素的位置不同: 1. back_inserter, 創(chuàng)建使用 push_back 實現(xiàn)插入迭代器 2. front_inserter, 使用 push_front 實現(xiàn)插入。 3. insert, 使用 insert 實現(xiàn)插入操作。學(xué)習(xí)摘錄

4、 117:三種 inserter 的綜合應(yīng)用在使用 front_inserter 時,元素始終在容器的第一個元素前面插入。使用 inserter 時,元素則在指定位置前面插入。list<int> ilst, ilst2, ilst3; / empty lists/ after this loop ilst contains: 3 2 1 0for (list<int>:size_type i = 0; i != 4; +i) ilst.push_front(i);/ after copy ilst2 contains: 0 1 2 3/ 與原容器順序相反copy(ils

5、t.begin(), ilst.end(), front_inserter(ilst2);/ after copy, ilst3 contains: 3 2 1 0 / 與原容器順序沒變 copy(ilst.begin(), ilst.end(), inserter(ilst3, ilst3.begin() ); istream_iterator<T> in(strm);對象 istream_iterator<T> in; ostream_iterator<T> in(strm); 對象學(xué)習(xí)摘錄 118: iostream 迭代器的構(gòu)造函數(shù) 創(chuàng)建從輸入流 s

6、trm 中讀取 T 類型對象的 istream_iteratoristream_iterator 對象的超出末端迭代器創(chuàng)建將 T 類型的對象寫到輸出流 strm 的 ostream_iterator ostream_iterator<T>in(strm, delim); 創(chuàng) 建 將 T 類 型 的 對 象 寫 到 輸 出 流 strm 的ostream_iterator 對象,在寫入過程中使用 delim 作為元素的分隔符。 delim 是以空字符結(jié)束 的字符數(shù)組。學(xué)習(xí)摘錄 119:流迭代器的定義 istream_iterator<int> cin_in(cin);/

7、reads ints from cinistream_iterator<int> end_of_stream;/ end iterator value/ writes Sales_items from the ofstream named outfile/ each element is followed by a space ofstream outfile;ostream_iterator<Sales_item> output(outfile, “ );學(xué)習(xí)摘錄 120: istream_iterator 對象上的操作 下面的程序,銜從 cin 中讀取 int 型數(shù)

8、據(jù),然后,使用 eof 作為結(jié)束符; 在循環(huán)中,從 cin 中讀取 int 型數(shù)據(jù),并將讀入的內(nèi)容保存在 vec 中,再實現(xiàn)自增。 istream_iterator<int> in_iter(cin);/ read ints from cinistream_iterator<int> 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

9、next value/ dereference reads next value from the istream vec.push_back(*in_iter+);也能直接用構(gòu)造函數(shù)的方法新建對象:如下 istream_iterator<int> in_iter(cin);/ read ints from cinistream_iterator<int> eof; / istream “ end ” iterator vector<int> vec(in_iter, eof);/ construct vec from an iterator range學(xué)習(xí)

10、摘錄 121: ostream_iterator 對象的使用可使用 ostream_iterator 對象將一個值序列寫入流中,其操作的過程與使用迭代器在將 一個組值逐個賦給容器中的元素相同。/ write one string per line to the standard outputostream_iterator<string> out_iter(cout, “ n ” );/ read strings from standard input and the end iteratoristream_iterator <string> in_iter(cin),

11、 eof; / 此處會先輸入第一次/ read until eof and write what was read to the standard outputwhile(in_iter != eof)/ write value of in_iter to standard output/ and then increment the iterator to get the next value from cin*out_iter+ = *in_iter+; / 由于那次已輸入了第一次,這次會再要求輸入一次再顯示 摘錄有想 121 :程序經(jīng)測試, 每當(dāng)輸入一行字符后, 則在下次輸入另一行字符后

12、顯示上一行輸入的字符。 該程序可從 while 語句入手去想,逐行輸入,放入 in_iter, 之后 out_iter 讀取并顯示。 解引操作符能夠使用數(shù)據(jù)。學(xué)習(xí)摘錄 122:與算法一起使用迭代器先看下面的例子:istream_iterator<int> cin_it(cin);/ reads ints from cinistream_iterator<int> end_of_stream;/ end iterator value/ initialize vec from the standard input:vector<int> vec (cin_it,

13、 end_of_stream);sort(vec.begin(), vec.end() );/ writes ints to cout using“ as the delimiterostream_iterator<int> output(cout, “ );/ write only the unique elements in vec to the standard outputunique_copy(vec.begin(), vec.end(), output);摘錄有想 122 :以前總是看不懂這類程序, 我想, 現(xiàn)在看完這章的內(nèi)容后, 基本上還是理解了這類程序 寫的是什么了

14、。前兩行不斷輸入,直到遇到結(jié)束符,第三行,將輸入的全部 int 逐個放入 vec 中; 第四行,對容器進(jìn)行排序。第五行,在每個 cout 之間輸入 ”“ ;最后行,符合算法的格式, unique_copy 算法, unique 的“復(fù)制”版本,將輸入范圍內(nèi) 不重復(fù)的值輸出,每個復(fù)制值后輸出一個空格。第四節(jié):泛型算法的結(jié)構(gòu) 算法最基本的性質(zhì)是需要使用的迭代器種類學(xué)習(xí)摘錄 123:根據(jù)對元素的操作將算法分為下面三種: 1. 只讀算法,不改變元素的值和順序。 2. 給指定元素賦新值的算法。 3. 將一個元素的值移給另一個元素的算法。學(xué)習(xí)摘錄 124:算法的形參模式 1. alg(beg, end, other parms); 2. alg(beg, end, dest, other parms);3. alg(beg, end, dest, other parms);4.alg(beg, end, beg2, end2, other parms);注:dest 形參是一個迭代器,用于指定存儲輸出數(shù)據(jù)的目標(biāo)對象。學(xué)習(xí)摘錄 125:迭代器的分類 迭代器可通過其所支持的操作來

溫馨提示

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

評論

0/150

提交評論