Evgenii Legotckoi
Evgenii LegotckoiТам. 21, 2019, 5:45 Т.Ж.

C++14 - кэштелетін қайтару мәні бар лямбда функциясы

Предположим, мы написали функцию, которая вычисляет какое-то значение или использует функцию для вычисления этого значения, при этом функция_, которая вычисляет значение, достаточно затратна в вычислении и долго работает. В этом случае мы вызываем лямбда-функцию несколько раз в некотором коде.

Чтобы избежать множественных вызовов тяжелой функции, мы можем кэшировать значение, которое возвращает тяжелая функция.


Пример кода

#include <iostream>
#include <string>

using namespace std;

int heavy_calc(int base) // heavy function that we want to call once
{
    cout << "heavy_calc" << std::endl;
    // sleep(+100500 years)
    return base * 25;
}

void calclulateValue(int base)
{
    // The following construction allows you to cache the result of executing a heavy function for the duration of one call to calclulateValue
    auto foo
    {
        [cache = heavy_calc(base)]()
        {
            return cache;
        }
    };
    // We call the lambda twice with the cached heavy calc value 
    // In this case, heavy calc is called only once
    int fooFoo = foo() + foo();
    cout << fooFoo << std::endl;
}

int main()
{
    // Call calclulateValue twice with a different base value,
    // to show that the cache is reset every time calclulateValue is called
    calclulateValue(1);
    calclulateValue(10);
    return 0;
}

Результат

heavy_calc
50
heavy_calc
500
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10

C++ - Тест 003. Условия и циклы

  • Нәтиже:42ұпай,
  • Бағалау ұпайлары-8
Соңғы пікірлер
i
innorwallҚар. 8, 2024, 7:03 Т.Қ.
Qt/C++ - Сабақ 009. QTimer немесе Qt тілінде таймермен қалай жұмыс істеу керек? She also saw an increase in her energy levels and improvement in her shortness of breath better business bureau online pharmacy priligy Transfection induced VEGFR2 promoter activity i…
i
innorwallҚар. 8, 2024, 6:36 Т.Қ.
Шаг 1: Настройка окружения для программирования на Python This fixed combination drug may be used as initial therapy or substituted for previously titrated doses of the individual components priligy side effects Expanded clinical phenotype o…
i
innorwallҚар. 8, 2024, 6:11 Т.Қ.
PyQt5 - Оқулық 003. QSystemTrayIcon - қолданбаны науаға қалай азайтуға болады where can i buy priligy The medium was changed every three days
i
innorwallҚар. 8, 2024, 3:29 Т.Қ.
EVILEG - 4 жыл онлайн buy priligy Pelleted food this way of administration is less stressful for the mice, and a few vendors offer a commercially available chow
Енді форумда талқылаңыз
i
innorwallҚар. 8, 2024, 6:44 Т.Қ.
добавить qlineseries в функции We ve got the first batch ready for clinical trials, said Ovadje priligy usa LICENSED SHOP Nolvadex
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Бізді әлеуметтік желілерде бақылаңыз