Скорость связанной лямбда (через 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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