вектор функций в c

#c #vector #functional-programming

Вопрос:

У меня есть вектор:

 std::vector<int> v;
 

Я возвращаю 10 элементов в этот вектор, так что теперь в нем 10 элементов: v[0], v[1], … ,v[9]

У меня есть другой вектор:

 std::vector<std::function<>()> v5;
 

Я хочу вернуть() эти формулы в v5: v[0]*v[1], v[0]*v[2], …

Как я могу вернуть() эти формулы в вектор v5? Можете ли вы помочь мне с синтаксисом? Я буду использовать эти формулы позже в программе.

Например, когда я вызываю v5[0], я хочу извлечь v[0]*v[1] (первая формула pushed_back для v5).

Комментарии:

1. Если я не ошибаюсь, вы уже дважды задавали этот вопрос? И какой смысл хранить «формулу»?

2. @silverfox ты прав. Мне нужно сохранить формулы в векторе. Затем я буду использовать эти формулы в программе.

Ответ №1:

Это может быть одним из способов:

 #include <functional>
#include <iostream>
#include <vector>

int main() {
    std::vector<int> v{3,4,5};

    // a vector of std::functions capturing v by reference
    std::vector<std::function<int()>> v5{
        [amp;v]{ return v[0] * v[1]; },
        [amp;v]{ return v[0] * v[2]; },
    };

    for(autoamp;amp; func : v5) {
        std::cout << func() << 'n';
    }
    
    v[0] = 10; // changing v changes the output of the formula:

    std::cout << v5[0]() << 'n';
}
 

Выход:

 12
15
40
 

Комментарии:

1. Мне не нужны оцененные результаты. Я хочу сохранить формулы.

2. @MehmetB. Ладно, возможно, я сначала неправильно понял ваши намерения. Я обновил ответ. Это больше то, что ты хотел бы сделать?