#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. Ладно, возможно, я сначала неправильно понял ваши намерения. Я обновил ответ. Это больше то, что ты хотел бы сделать?