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

前端之家收集整理的这篇文章主要介绍了c – 使用多个输入向量中的值的笛卡尔积来调用lambda前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有几个int或double的向量:
  1. std::vector<int> iv = { 1,2,3,4 };
  2. std::vector<double> jv = { .5,1.,1.5,2. };
  3. std::vector<int> kv = { 5,4,2 };

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

  1. for (int i : iv)
  2. {
  3. for (double j : jv)
  4. {
  5. for (int k : kv)
  6. {
  7. process(i,j,k);
  8. }
  9. }
  10. }

我想把它变成一个电话

  1. product(iv,jv,kv,[=](int i,double j,int k)
  2. {
  3. process(i,k);
  4. });

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

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

解决方法

这是一个简短的递归版本,只适用于任何迭代.它通过const& amp;为简单起见:
  1. template <typename F>
  2. void product(F f) {
  3. f();
  4. }
  5.  
  6. template <typename F,typename C1,typename... Cs>
  7. void product(F f,C1 const& c1,Cs const&... cs) {
  8. for (auto const& e1 : c1) {
  9. product([&](auto const&... es){
  10. f(e1,es...);
  11. },cs...);
  12. }
  13. }

这将是:

  1. product(process,iv,kv);

猜你在找的C&C++相关文章