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可以匹配的函數類型多以下面的爲主:
(2) Lambda表達式(lambda expression)謂詞
(3) 庫定義的函數對象(Library-Defined Function Object)謂詞
[1]《STL3.0源碼》