C 演算法庫 常用函式彙總

2021-10-03 11:28:46 字數 4478 閱讀 5202

參考了《c++stl 標準程式庫開發指南》

1. for_each

函式:for_each(iterator begin , iterator end , proc op)

說明:for_each 演算法實現對區間 [begin,end] 中的每個元素均呼叫程序op

例子:將陣列 a 和 vector b中的全部元素按順序列印出來。

#include

#include

#include

using

namespace std;

void

pprint

(int t)

intmain()

2.元素計數

函式:count(iterator begin,iterator end,const t& value)

count_if(iterator begin,iterator end,unarypredicate op)

說明:前者將統計在區間內等於valu的元素個數;後者統計在區間內只有op引數為真時,才統計元素個數,返回值為int。

例子:統計陣列中4的數量和偶數的數量。

#include

#include

#include

using

namespace std;

bool

is_even

(int t)

intmain()

;printf

("4的個數為\n");

printf

("%d"

,count

(a,a+7,

4));

printf

("\n偶數的個數為\n");

printf

("%d"

,count_if

(a,a+

7,is_even));

return0;

}

3.求最大值最小值(以最小值為例)

函式:iterator min_element(iterator begin,iterator end)

iterator min_element(iterator begin,iterator end,cmp op)

說明:前者預設以"operator<"來比較;後者用引數op來進行比較,返回的是迭代器指標型別。

例子:返回最大的元素和絕對值最大的元素。(注意distance的用法和解引用,distance求取兩個元素位置的差值,為int)

#include

#include

#include

#include

using

namespace std;

bool

cmp(

int a,

int b)

intmain()

; vector<

int> b;

vector<

int>

::iterator t;

for(

int i=

0;i<

8;i++

) b.

push_back

(a[i]);

printf

("陣列b中最大的元素是\n");

printf

("%d\n",*

max_element

(b.begin()

,b.end()

));printf

("陣列b中絕對值最大的元素及其位置是\n");

t=max_element

(b.begin()

,b.end()

,cmp)

;printf

("%d %d\n"

,*t,

distance

(b.begin()

,t)+1)

;return0;

}

4.搜尋元素

函式iterator find(iterator begin,iterator end,const t& value)

iterator find_if(iterator begin,iterator end,unarypredicate op)

說明:前者返回第乙個元素值為value的位置;後者返回滿足條件op的第乙個元素。

例子:搜尋值為4的元素和大於6的元素。(注意bind2nd 和greater()用法,需要functional庫)

#include

#include

#include

#include

using

namespace std;

intmain()

; vector<

int> b;

vector<

int>

::iterator t;

for(

int i=

0;i<

8;i++

) b.

push_back

(a[i]);

printf

("值為4的第乙個元素位置為\n");

printf

("%d\n"

,distance

(b.begin()

,find

(b.begin()

,b.end()

,4))

+1);

printf

("值大於6的第乙個元素位置為\n");

printf

("%d\n"

,distance

(b.begin()

,find_if

(b.begin()

,b.end()

,bind2nd

(greater<

int>()

,6))

)+1)

;return0;

}

5.互換元素

函式 :swap(t& a,t& b)

說明:略

6.排列

函式:next_permutation(a.begin(),a.end()) 公升序排列

prev_permutation(a.begin(),a.end()) 降序排列

說明:公升序排列時,原排列是小的字典序,如果是最大的字典序排雷,則不能重排元素,降序同。

例子:分別按公升序降序重排陣列。

#include

#include

#include

using

namespace std;

void

pprint

(char t)

intmain()

while

(next_permutation

(b.begin()

,b.end()

));printf

("按原序列降序排序過程\n");

dowhile

(prev_permutation

(c.begin()

,c.end()

));return0;

}

7.排序

函式:sort(a.begin(),a.end(),cmp)

說明:把元素按照cmp的規則進行排序,如果cmp預設,則為公升序排序。(支援結構體排序)

例子:把陣列從大到小排序。

#include

#include

#include

using

namespace std;

void

pprint

(int t)

bool

cmp(

int a,

int b)

intmain()

; vector<

int> b;

b.assign

(a,a+6)

;sort

(b.begin()

,b.end()

,cmp)

;printf

("按公升序排列後的陣列\n");

for_each

(b.begin()

,b.end()

,pprint)

;return0;

}

常用函式彙總

常用內建 作業系統相關 檔案正規表示式 enumerate goods list coffee 10 chicken 20 iphone 8000 macpro 15000 car 100000 for i,good in enumerate goods list print s s i,good ...

C 標準庫常用函式彙總

include指令 排序sort vec.begin vec.end 反轉reverse str.begin str.end include指令 定義了三個型別來支援 檔案io 從乙個給定檔案讀取資料 ifstream fin pose.txt 向乙個給定檔案寫入資料 ofstream 讀寫給定檔案...

C 演算法庫(algorithm)

演算法庫需要標頭檔案 include 返回函式 x 和 y 的最大值。include include using namespace std intmain 返回函式 x 和 y 的最小值。返回值為 x 的絕對值,必須為整數。如果是浮點數的絕對值使用 math.h 中的 fabs 交換 a,b 的值...