Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 03:51   #1
ZMEY_KORAL
 
Регистрация: 26.01.2012
Сообщений: 5
Вопрос find_if()?????

С конструктором по умолчанию это мой косяк но вот с find_if( loc, c.end(), ????? ); так и не понятно!!!!! по указанной ссылке предикат использует значение такого же типа что и класс в шаблоне а нам нужно сравнивать одно значение типа int с полем int a в классе A ))))) или есть мысль что find_if() для этих целей не подходит, тогда возникает вопрос какую функцию лучше заюзать если таковая есть ????? )))))
допустим есть класс ->
Код:
class A
{
 public:
  A(int a1, int b1){a=a1; b=b1;}
  A(){a=0;b=0}
  int a;
  int b;
  
};
ну и основная функция ->
Код:
int main()
{
  list<A> c;
  A d1(1,2);
  A d2(3,4);
  c.push_front(d1);
  c.push_front(d2);
  int a = 1;
  list<A>::iterator loc = c.begin();
  //loc = find_if( loc, c.end(), ????? );
  return 0;
}
вопрос как с помощью find_if найти нужный объект в list класса A используя для сравнения переменную a и поле класса a ??????

Последний раз редактировалось ZMEY_KORAL; 15.02.2012 в 17:51.
ZMEY_KORAL вне форума Ответить с цитированием
Старый 15.02.2012, 07:34   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Гуглим алгоритм:
http://www.cplusplus.com/reference/algorithm/find_if/

Имеем форму записи:
Код:
template<class InputIterator, class Predicate>
  InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )
  {
    for ( ; first!=last ; first++ ) if ( pred(*first) ) break;
    return first;
  }
Ну и самое главное - смысл предиката:

pred
Unary predicate taking an element in the range as argument, and returning a value indicating the falsehood (with false, or a zero value) or truth (true, or non-zero) of some condition applied to it. This can either be a pointer to a function or an object whose class overloads operator().

Там же смотрим пример, и осознаём, что предикатом может быть любая сущность, которая может вести себя подобно функции, и на выходе возвращает истину, или ложь.

Теперь смотрим твой код:

Код:
class A
{
public:
    A(int a1, int b1){a=a1; b=b1;}
    A(){A(0,0);}  // <---   Внимательно смотрим сюда
    int a;
    int b;
};
1. Что это за конструктор такой по умолчанию? Ты уверен, что создание временного объекта внутри конструктора и его разрушение сразу же, как только конструктор по умолчанию отработает, это именно то, что тебе нужно?

2. Отсутствует operator() (A* rhs) {...}
Соответственно, класс не может являться предиктатом для функции find_if
Его надлежит построить согласно примеру по указанной выше ссылке.

/ps Nicolai M. Josuttis со своей книгой "с++ Стандартная библиотека" спасет отца русской демократии.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм находит только первое вхождение find_if Progsenya Общие вопросы C/C++ 5 11.09.2010 10:38
реализация алгоритма find_if Progsenya Общие вопросы C/C++ 2 10.09.2010 23:58