Не существует версии std::find_if()
, которая принимает предикат с несколькими входными аргументами.std::find_if()
перебирает указанный диапазон итераторов, передавая каждый элемент по предикату по одному за раз.Таким образом, предикат должен принимать только 1 входной аргумент, не больше, не меньше.Вот почему все примеры, которые вы видели, используют аргумент 1.
Показанная вами функция range_search()
просто несовместима для использования в качестве самого предиката.
В C ++ 11и позже вы можете использовать лямбду для захвата дополнительных значений, которые вы хотите передать range_search()
, например:
double X1 = ...;
doubke X2 = ...;
auto it = find_if(x.begin(), x.end(),
[X1, X2](double x){ return range_search(x, X1, X2); }
);
До C ++ 11 вы можете использовать вместо этого объект-функтор:
struct range_search_s
{
double X1, X2;
range_search_s(double x1, double x2) : X1(x1), X2(x2) {}
bool operator()(double x) { return range_search(x, X1, X2); }
};
double X1 = ...;
doubke X2 = ...;
vector<double>::iterator it = find_if(x.begin(), x.end(), range_search_s(X1, X2));