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