bind2nd на bind
От: eiler13  
Дата: 11.03.13 20:23
Оценка:
Как правильно должна выглядеть конструкция в C++11:
find_if(l1.begin(), l1.end(), bind2nd(less<int>(),7));

?

Вот это вызывает проблемы:
int x = 7;
find_if(l2.begin(), l2.end(), bind(&less<int>(),&x,_2);
Re: bind2nd на bind
От: Abyx Россия  
Дата: 11.03.13 20:29
Оценка:
Здравствуйте, eiler13, Вы писали:

E>Как правильно должна выглядеть конструкция в C++11:

E>
E>find_if(l1.begin(), l1.end(), bind2nd(less<int>(),7));
E>

E>?

E>Вот это вызывает проблемы:

E>
E>int x = 7;
E>find_if(l2.begin(), l2.end(), bind(&less<int>(),&x,_2);
E>


bind(less<int>(), _1, 7)

или может bind(less<int>(), 7, _1), хз что именно Вам надо

я бы юзал [](int x){ return x < 7; }
In Zen We Trust
Re: bind2nd на bind
От: Evgeny.Panasyuk Россия  
Дата: 11.03.13 20:34
Оценка:
Разные варианты:
#include <boost/range/algorithm.hpp>
#include <boost/phoenix.hpp>
#include <functional>
#include <algorithm>
#include <iostream>
#include <ostream>
#include <vector>

using namespace std;
using namespace placeholders;
using boost::phoenix::arg_names::arg1;


int main()
{
    vector<int> v{7,7,7,1,2,3};
    cout << *find_if(v.begin(), v.end(), bind2nd(less<int>(),7)) << endl;
    cout << *find_if(v.begin(), v.end(), bind(less<int>(),_1,7) ) << endl;
    int x = 7;
    cout << *find_if(v.begin(), v.end(), bind(less<int>(),_1,ref(x)) ) << endl;
    cout << *find_if(v.begin(), v.end(), arg1 < 7 ) << endl;
    cout << *boost::find_if(v, arg1 < 7 ) << endl;
}
Re[2]: bind2nd на bind
От: eiler13  
Дата: 11.03.13 20:36
Оценка:
Здравствуйте, Abyx, Вы писали:

A>bind(less<int>(), _1, 7)


A>или может bind(less<int>(), 7, _1), хз что именно Вам надо


A>я бы юзал [](int x){ return x < 7; }


мне нужно вызов bind2st заменить на вызов bind в стиле с++11. Пытаюсь разобраться как работать с
адаптерами в с++11.

Спасибо, понял! Получилось.
Re[2]: bind2nd на bind
От: eiler13  
Дата: 11.03.13 20:45
Оценка:
Здравствуйте, Abyx, Вы писали:


A>я бы юзал [](int x){ return x < 7; }


а как эту lambda-функцию передать в find_if ?
Re[3]: bind2nd на bind
От: Evgeny.Panasyuk Россия  
Дата: 11.03.13 20:56
Оценка: 12 (2)
Здравствуйте, eiler13, Вы писали:

A>>я бы юзал [](int x){ return x < 7; }

E>а как эту lambda-функцию передать в find_if ?

find_if(v.begin(), v.end(), [](int x){ return x < 7; } )

А в будущем, возможно даже так:
find_if(v.begin(), v.end(), [](x) x < 7 )

аж слюнки потекли
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.