count和count_if函數

1.count函數

該函數主要用於統計序列化容器(內部沒有實現特定排序算法的容器,例如vector,list,queue,stack等)中某個特定值出現的次數。具體的源碼實現如下:

template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value) {
  typename iterator_traits<InputIterator>::difference_type n = 0;
  for ( ; first != last; ++first)
    if (*first == value)
      ++n;
  return n;
}

2.count_if函數

今天在優化代碼的時候碰巧看到count_if函數,研究了一下,該函數主要用於統計序列化容器(內部沒有實現特定排序算法的容器,例如vector,list,queue,stack等)滿足自定義函數返回true條件的元素總數,還是比較有用的。具體的實現源碼如下:

//stl_algo.h
template <class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type
count_if(InputIterator first, InputIterator last, Predicate pred) { //Predicate謂詞代表匹配的自定義函數(仿函數)
  typename iterator_traits<InputIterator>::difference_type n = 0;
  for ( ; first != last; ++first)
    if (pred(*first)) //滿足自定義的函數(返回值爲bool型)爲true的會被統計
      ++n;
  return n;
}

Predicate可以匹配的函數類型多以下面的爲主:

(1) 函數指針(function pointer)謂詞

(2) Lambda表達式(lambda expression)謂詞

(3) 庫定義的函數對象(Library-Defined Function Object)謂詞

[1]《STL3.0源碼》 

[2]https://blog.csdn.net/a262624/article/details/87904921

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章