c – 使用多个输入向量中的值的笛卡尔积来调用lambda
发布时间:2020-12-16 03:28:13 所属栏目:百科 来源:网络整理
导读:我有几个int或double的向量: std::vectorint iv = { 1,2,3,4 };std::vectordouble jv = { .5,1.,1.5,2. };std::vectorint kv = { 5,4,2 }; 我需要处理每个向量的笛卡尔积: for (int i : iv){ for (double j : jv) { for (int k : kv) { process(i,j,k); }
我有几个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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |