fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. bool increase(const std::vector<std::string>& 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[index].size()) {
  11. it[index] = 0;
  12. } else {
  13. return true;
  14. }
  15. }
  16. return false;
  17. }
  18.  
  19. void do_job(const std::vector<std::string>& v, std::vector<std::size_t>& it)
  20. {
  21. for (std::size_t i = 0, size = v.size(); i != size; ++i) {
  22. std::cout << v[i][it[i]];
  23. }
  24. std::cout << std::endl;
  25. }
  26.  
  27. void iterate(const std::vector<std::string>& v)
  28. {
  29. std::vector<std::size_t> it(v.size(), 0);
  30.  
  31. do {
  32. do_job(v, it);
  33. } while (increase(v, it));
  34. }
  35.  
  36. int main()
  37. {
  38. const std::vector<std::string> v{"b", "ACD", "12"};
  39. iterate(v);
  40. }
Success #stdin #stdout 0s 4436KB
stdin
Standard input is empty
stdout
bA1
bA2
bC1
bC2
bD1
bD2