C Primer 10 泛型演算法

2022-03-12 02:18:11 字數 2200 閱讀 4057

1 #include2 #include3 #include4 #include

5 #include6

using

namespace

std;78

void elimdups(vector &words)914

15void display(vector &words)

1621

22int

main()

2330

31 vectorwords;

32string

str;

33while (in >>str)

34words.push_back(str);

35elimdups(words);

36display(words);

37return0;

38 }

view code

輸出結果:

定製操作

示例**:

1 #include2 #include3 #include4 #include

5 #include6

using

namespace

std;78

void elimdups(vector &words)914

15void biggies(vector &words, vector::size_type sz)

16);

19 auto wc = find_if(words.begin(), words.end(), [sz](const

string &a) );

20 auto count = words.end() -wc;

21 for_each(wc, words.end(), (const

string &s) );

22 cout <

2425

intmain()

2633

34 vectorwords;

35string

str;

36while (in >>str)

37words.push_back(str);

38 auto sz = 5;39

biggies(words, sz);

40return0;

41 }

view code

輸出結果:

3. 反向迭代器

1 #include2 #include3 #include4

using

namespace

std;56

intmain()7;

9for (auto r_iter = vec.crbegin(); r_iter != vec.crend(); ++r_iter)

10 cout << *r_iter << "";

11 cout <

12return0;

13 }

輸出結果:

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

void print(int

elem)811

12int

main()

13

輸出結果:

【分析】

**首先在乙個deque中插入1到9,然後查詢元素值為2和7的位置,分別賦值給迭代器pos1和pos2,然後輸出,由於stl中的操作總是左開右閉的區間,即[2,7),所以輸出2 3 4 5 6,7不會輸出。

接下來將迭代器轉換成逆向迭代器,再次輸出,對於反向迭代器,由於是反向,所以按邏輯來說它是左開右閉的(這裡我嘗試了rpos2為iterator.end(),rpos1為iterator.begin(),此時輸出全部),即(7,2](事實上還是左閉右開,只不過此時的左和iterator順序一樣)。所以輸出6 5 4 3 2,下面的解釋的很清楚。

足跡C primer 10 函式基礎

c 語言中,名字有作用域,物件有生命週期。名字的作用域是程式文字的一部分,名字在其中可見。物件生命週期是程式執行過程中該物件存在的一段時間。size t count calls int main return 0 和其他名字一樣,函式的名字也必須在使用之前宣告。類似於變數,函式只能定義一次,但可以宣...

C Primer筆記 泛型演算法

地點 基地 泛型演算法並不直接操作容器,而是遍歷兩個迭代器指定的乙個元素範圍,如此將演算法是作用容器分離,實現通用性。泛型演算法多數定義在標頭檔案algorithm中。比如我們想在vector下找到乙個特定值,可實現如下 include include includeusing namespace ...

C primer筆記 泛型演算法

1 泛型演算法 演算法是因為其實現了一些經典演算法的公共介面,如排序和搜尋。泛型是因為他們可以作用於不同型別的元素和多種容器型別甚至是內建陣列。故稱泛型演算法 2 基本上都定義在algorithm和numeric兩個標頭檔案中,這些演算法遍歷由兩個迭代器指定的乙個元素範圍來進行操作,不對容器進行直接...