Следующий код предназначен для подсчета количества элементов, удовлетворяющих следующему условию:
(i > 5) && (i <=10)
std::vector<int> ints;
..
int count=std::count_if(
ints.begin(),
ints.end(),
boost::bind( // # bind 1
std::logical_and<bool>(),
boost::bind(std::greater<int>(),_1,5), // # bind 2
boost::bind(std::less_equal<int>(),_1,10))); // # bind 3
template <class T> struct greater : binary_function <T,T,bool> {
bool operator() (const T& x, const T& y) const
{return x>y;}
};
Я разлагаю вышеприведенное утверждение следующим образом:
boost::bind(std::greater<int>(),_1,5)
используется для i > 5
boost::bind(std::less_equal<int>(),_1,10)
используется для i <=10
.
У меня проблема в том, как понять приведенный выше код, потому что если я напишу код и напишу следующее:
boost::bind(std::greater<int>(),_2,5)
используется для i > 5
boost::bind(std::less_equal<int>(),_2,10)
используется для i <=10
.
Функция std::greater
нуждается в двух параметрах (то есть x
и y
) и обеспечиваетэто x > y
.Поэтому я подумал, что нам нужно связать y
с 5
, чтобы мы могли найти все Xs
.Конечно, моя мысль неверна.
Может кто-нибудь объяснить мне?Спасибо