C++學習-函式-count與count_if
阿新 • • 發佈:2020-12-06
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出現的次數