: 8. .2
3.01 22 2016.
() 2013-2016, , .., ,
- for_each . , 2. , , 3, 4, 5, .. , , .
, . , - , . , count_if, .
, count_if :
//
if (up(* first))
++ result;
. ? , , . . , , , , . (callable entity).
, (functional object), (functor). , (). true, , , :
struct DividesOn
{
// -
DividesOn (int _divisor)
: m_divisor(_divisor) {}
//
bool operator() (int_x) const
{
// true,
return _x % m_divisor == 0;
}
//
const int m_divisor;
};
|
|
:
DividesOn dividesOn2(2);
DividesOn dividesOn3(3);
DividesOn dividesOn4(4);
, :
assert(dividesOn3(6));
assert(! dividesOn4(7));
, , 2, 3, 4:
int main ()
{
// : 0 1 2 3 4 5 6 7 8 9
std::vector< int > v;
for (int i = 0; i < 10; i++)
v.push_back(i);
// 2, 3, 4
DividesOn dividesOn2(2);
DividesOn dividesOn3(3);
DividesOn dividesOn4(4);
// count_if
std::cout
<< "Number of elements that divide on 2: "
<< std::count_if(v.begin(), v.end(), dividesOn2)
<< ", on 3: "
<< std::count_if(v.begin(), v.end(), dividesOn3)
<< ", on 4: "
<< std::count_if(v.begin(), v.end(), dividesOn4)
<< std::endl;
}
: