?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Entries by category: авто

лямбда в C++ - уже работающая реальность
nyaload
_winnie
В питоне у функций сортировки, min(список) есть параметр key, это callback-функция которая говорит, по какому признаку отсортировать. У сортировки есть ещё параметр cmp, callback в котором пользователь задаёт свою функцию сравнения двух величин. Так вот, я им ни разу не воспользовался. Всегда было достаточно key.

В связи с чем обидно, что у C++ных std::sort, std::min_element это указать невозможно, в коде callback нужно указывать в два раза больше чем хочется.

Кстати, в C++ появились лямбда функции, их уже можно использовать в gcc4.что.то.там и Visual C++ 2010.

Теперь что бы найти в массиве наиболее близкий к val можно писать
int *a_min = std::min_element(a_begin, a_end, [=](int x, int y) { return abs(x-val) < abs(y-val); });

Можно в вашу велосипедную корпоративную библиотеку утилит добавить min_by_key, что бы писать
int *a_min = my::min_by_key(array, [=](int x) { return abs(x-val); });

Раньше, что бы воспользоваться уже написаным std::min_element, приходилось писать мего-функтор где-то на страницу кода выше, за пределом экрана. Про boost::* молчу. Это приводило к тому, что рукописный цикл был и читаемей, и проще писался. Единственный алгоритм который сцали писать с нуля - это std::sort. Теперь же можно писать просто и наглядно, при code-review не нужно анализировать, сделали ли типичную опечатку в коде поиска минимума, что будет если список пустой.

Вы всё ещё пишете цикл нахождения минимального элемента каждый раз руками в цикле? Лямбда-функции и утилитные алгоритмы уберут циклы и опечатки в циклах, и сделают из пяти строк - одну!

upd: поторопился, сейчас распространён gcc4.4, а лямбды сделали в gcc4.5, который вот-вот будет в дефолтных дистрибутивах. Надо перепостить это через полгодика :)
Tags: ,