Скорость связанной лямбда (через std :: function) vs operator () структуры функцииC++

Программы на C++. Форум разработчиков
Anonymous
Скорость связанной лямбда (через std :: function) vs operator () структуры функции

Сообщение Anonymous »

auto lam = [](int a, int b, int c) { return a < b && b < c; };

struct functor {
int a;
int b;
bool operator()(int n) const { return a < n && n < b; }
};
< /code>

В первой версии мы < /p>

std::vector lamvals;
// get parameters and for each
lamvals.emplace_back(std::bind(lam, a, std::placeholders::_1, b));
< /code>

Альтернатива - < /p>

std::vector lamvals;
// get parameters and for each
lamvals.emplace_back(functor{a, b});
< /code>

В обоих случаях у нас есть простая итерация < /p>

return std::any_of(lamvals.cbegin(), lamvals.cend(),
[n](const decltype(lamvals)::value_type & t){return t(n);});
< /code>

Я вижу разницу в скорости 3: 1, с границей Lambda медленнее. Функтор почти такой же быстрый, как хранение целочисленных пар и жестких кодировки тестов. Очевидно, что жесткий кодирование не так полезно для производственного кода, потому что в игре будет несколько функций, а не только между. Тем не менее, я могу пойти со многими функторами или многими ламбдами. Последнее меньше строк кода и выглядит чище, но я не думаю, что могу позволить себе такую ​​разницу в скорости; Этот код находится в критическом цикле. < /p>

Я ищу предложения ускорения. < /p>

Подробнее здесь: https://stackoverflow.com/questions/259 ... tor-struct

Вернуться в «C++»