fork(4) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. bool increase(const std::vector<std::vector<int>>& v, std::vector<std::size_t>& it)
  5. {
  6. for (std::size_t i = 0, size = it.size(); i != size; ++i) {
  7. const std::size_t index = size - 1 - i;
  8. ++it[index];
  9. if (it[index] >= v[index].size()) {
  10. it[index] = 0;
  11. } else {
  12. return true;
  13. }
  14. }
  15. return false;
  16. }
  17.  
  18. void do_job(const std::vector<std::vector<int>>& v,
  19. const std::vector<std::size_t>& it)
  20. {
  21. for (std::size_t i = 0; i != it.size(); ++i) {
  22. std::cout << v[i][it[i]] << " ";
  23. }
  24. std::cout << std::endl;
  25. }
  26.  
  27. void iterate(const std::vector<std::vector<int>>& v)
  28. {
  29. std::vector<std::size_t> it(v.size(), 0u);
  30.  
  31. do {
  32. do_job(v, it);
  33. } while (increase(v, it));
  34. }
  35.  
  36. int main(int argc, char *argv[])
  37. {
  38. std::vector<std::vector<int>> v = {
  39. {1,2,3},
  40. {4,5},
  41. {6,7,8,9},
  42. {10,11}
  43. };
  44. iterate(v);
  45. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
1 4 6 10 
1 4 6 11 
1 4 7 10 
1 4 7 11 
1 4 8 10 
1 4 8 11 
1 4 9 10 
1 4 9 11 
1 5 6 10 
1 5 6 11 
1 5 7 10 
1 5 7 11 
1 5 8 10 
1 5 8 11 
1 5 9 10 
1 5 9 11 
2 4 6 10 
2 4 6 11 
2 4 7 10 
2 4 7 11 
2 4 8 10 
2 4 8 11 
2 4 9 10 
2 4 9 11 
2 5 6 10 
2 5 6 11 
2 5 7 10 
2 5 7 11 
2 5 8 10 
2 5 8 11 
2 5 9 10 
2 5 9 11 
3 4 6 10 
3 4 6 11 
3 4 7 10 
3 4 7 11 
3 4 8 10 
3 4 8 11 
3 4 9 10 
3 4 9 11 
3 5 6 10 
3 5 6 11 
3 5 7 10 
3 5 7 11 
3 5 8 10 
3 5 8 11 
3 5 9 10 
3 5 9 11