【问题标题】:vector of functions in c++c++中的函数向量
【发布时间】:2021-08-23 18:33:40
【问题描述】:

我有一个向量:

std::vector<int> v;

我将 10 个元素推回这个向量,所以现在它有 10 个元素:v[0], v[1], ... ,v[9]

我还有另一个向量:

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

我想 push_back() 这些公式到 v5: v[0]*v[1], v[0]*v[2], ...

如何将这些公式 push_back() 转换为 v5 向量?你能帮我语法吗? 稍后我将在程序中使用这些公式。

例如当我调用v5[0]时,我想提取v[0]*v[1](第一个push_back公式到v5)。

【问题讨论】:

  • 如果我没记错的话,你已经问过这个问题两次了吗?存储“公式”有什么意义?
  • @silverfox 你是对的。我需要将公式存储在向量中。然后我会在程序中使用这些公式。

标签: c++ vector functional-programming


【解决方案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{
        [&v]{ return v[0] * v[1]; },
        [&v]{ return v[0] * v[2]; },
    };

    for(auto&& 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

【讨论】:

  • 我不想要评估结果。我想存储公式。
  • @MehmetB。好吧,我一开始可能误解了你的意图。我已经更新了答案。这是你更想做的事情吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多