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 – 使用多个输入向量中的值的笛卡尔积来调用lambda全部内容,希望文章能够帮你解决c – 使用多个输入向量中的值的笛卡尔积来调用lambda所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)