0
点赞
收藏
分享

微信扫一扫

count_if 源码剖析


一:用法解析


函数原型:

template <class InputIterator, class UnaryPredicate>
  typename iterator_traits<InputIterator>::difference_type
    count_if (InputIterator first, InputIterator last, UnaryPredicate pred);

不理解typename的含义

功能:

在区间[ first , last )找到使pred为真的数,返回其个数。

例子:

// count_if example
#include <iostream> // std::cout
#include <algorithm> // std::count_if
#include <vector> // std::vector

bool IsOdd (int i) { return ((i%2)==1); }

int main () {
std::vector<int> myvector;
for (int i=1; i<10; i++) myvector.push_back(i); // myvector: 1 2 3 4 5 6 7 8 9

int mycount = count_if (myvector.begin(), myvector.end(), IsOdd);
std::cout << "myvector contains " << mycount << " odd values.\n";

return 0;
}

运行如下:

myvector contains 5 odd values.


二:源码剖析

// TEMPLATE FUNCTION count_if
template<class _InIt,
class _Pr> inline
typename iterator_traits<_InIt>::difference_type
_Count_if(_InIt _First, _InIt _Last, _Pr _Pred)
{ // count elements satisfying _Pred
typename iterator_traits<_InIt>::difference_type _Count = 0;

for (; _First != _Last; ++_First)
if (_Pred(*_First))
++_Count;
return (_Count);
}

template<class _InIt,
class _Pr> inline
typename iterator_traits<_InIt>::difference_type
count_if(_InIt _First, _InIt _Last, _Pr _Pred)
{ // count elements satisfying _Pred
_DEBUG_RANGE_PTR(_First, _Last, _Pred);
return (_Count_if(_Unchecked(_First), _Unchecked(_Last), _Pred));
}




源码摘抄自Visual Studio 2015安装目录algorithm文件中。

点击进入目录----> ​​C++源码剖析目录​​






举报

相关推荐

0 条评论