c – 使用多个输入向量中的值的笛卡尔积来调用lambda

我有几个int或double的向量:
std::vector<int>    iv = { 1,2,3,4 };
std::vector<double> jv = { .5,1.,1.5,2. };
std::vector<int>    kv = { 5,4,2 };

我需要处理每个向量的笛卡尔积:

for (int i : iv)
{
    for (double j : jv)
    {
        for (int k : kv)
        {
            process(i,j,k);
        }
    }
}

我想把它变成一个电话

product(iv,jv,kv,[=](int i,double j,int k)
    {
        process(i,k);
    });

>输入向量的数量是可变的
>存储在输入向量中的类型是可变的

这可能吗? (我正在使用C 14)

解决方法

这是一个简短的递归版本,只适用于任何迭代.它通过const& amp;为简单起见:
template <typename F>
void product(F f) {
    f();
}

template <typename F,typename C1,typename... Cs> 
void product(F f,C1 const& c1,Cs const&... cs) {
    for (auto const& e1 : c1) {
        product([&](auto const&... es){
            f(e1,es...);
        },cs...);
    }   
}

这将是:

product(process,iv,kv);

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...