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