fork download
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. typedef std::vector<unsigned int> uint_vector;
  5. typedef std::vector<uint_vector> values_vector;
  6.  
  7. values_vector all_values (const uint_vector & ranges, unsigned int pos=0) {
  8. values_vector result;
  9. if (pos == ranges.size()) {
  10. result.push_back (uint_vector());
  11. }
  12. else {
  13. values_vector rem_result = all_values (ranges, pos+1);
  14. for (unsigned int v = 0; v < ranges[pos]; ++v) {
  15. for (auto it : rem_result) {
  16. result.push_back (uint_vector(1,v));
  17. result.back().insert (result.back().end(), it.begin(), it.end());
  18. }
  19. }
  20. }
  21. return result;
  22. }
  23.  
  24. void print_values (const values_vector & combos) {
  25. for (auto combo : combos) {
  26. std::cout << "[ ";
  27. for (auto num : combo) {
  28. std::cout << num << ' ';
  29. }
  30. std::cout << "]\n";
  31. }
  32. }
  33.  
  34. int main () {
  35. uint_vector ranges {3,2,2};
  36. print_values (all_values (ranges));
  37. return 0;
  38. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
[ 0 0 0 ]
[ 0 0 1 ]
[ 0 1 0 ]
[ 0 1 1 ]
[ 1 0 0 ]
[ 1 0 1 ]
[ 1 1 0 ]
[ 1 1 1 ]
[ 2 0 0 ]
[ 2 0 1 ]
[ 2 1 0 ]
[ 2 1 1 ]