1. 程式人生 > 實用技巧 >C++學習-函式-count與count_if

C++學習-函式-count與count_if

count和count_if的用法總結

1 algorithm下的count

algorithm標頭檔案下的count用於元素的計數,使用物件包括vector,list,set,陣列,等等。如:

count(begin,end,k);//格式
int arr[100];
count(arr,arr+i,元素K)

返回值是arr中元素k出現的次數,而二維陣列內部其實也是線性的,所以可以用取地址符&獲得要查詢的返回。

vector<int> vec={...};
count(vec.begin(),vec.end(),元素K);

返回值是vec中元素k出現的次數,對於list,set同理,第一個引數和第二個引數填入要查詢的範圍(注意是迭代器,所以對queue,stack而言並不支援),第三個引數填入要查詢的元素。
至於map,由於個人沒有找到合適的填入第三個引數的方法,編譯器每次都報錯,所以,,,(逃)

2 algorithm標頭檔案下的count_if

algorithm下的count_if用於查詢滿足條件的元素的出現次數,物件包括陣列,vector,list,map,等等。
格式如下:

count_if(begin,end,cmp);

其中cmp函式應是一個返回值型別為bool的函式,需要我們自己書寫,以此確定我們需要元素的返回條件 p 。如:

bool cmp(int x)
{
    if(x滿足條件p) return 1;
    else return 0;
}

如果我們需要統計list裡奇數出現的次數

bool cmp(int x)
{
    return x%2;
}

int main()
{
    list<int> lis;
    ...
    cout<<count_if(lis.begin(),lis.end(),cmp);//輸出奇數出現的次數
    ...
    return 0;
}

對於其他容器同理,同時注意cmp函式裡的形參的資料型別應與 容器/陣列 裡元素的資料型別一致。
值得注意的是map可以用於count_if,不過寫cmp函式的時候要注意形參的型別應該是pair。

bool cmp(pair<int,int> x);//能不能是其他型別個人不清楚
{
    if(x.first滿足條件p) return 1;
    else return 0;
}

3 關聯容器自帶的count函式

關聯容器map和set自帶count函式,由於去重性,返回值只能是1或0,可以藉此判斷該元素是否存在。

map<int,string> a;
a.count(k)  //返回鍵值k出現的次數(注意是鍵值),結果為0或1
set<int> b;
b.count(k)  //返回元素k出現的次數