fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. template<typename T>
  5. void do_job(const std::vector<T>& v, const std::vector<std::size_t>& groups)
  6. {
  7. std::cout << " e(";
  8. for (std::size_t i = 0; i != v.size(); ++i) {
  9. if (groups[i] == 0) {
  10. std::cout << " " << v[i];
  11. }
  12. }
  13. std::cout << ",";
  14. for (std::size_t i = 0; i != v.size(); ++i) {
  15. if (groups[i] == 1) {
  16. std::cout << " " << v[i];
  17. }
  18. }
  19. std::cout << ")\n";
  20. }
  21.  
  22. template<typename T>
  23. void print_combinations(const std::vector<T>& v)
  24. {
  25. std::vector<std::size_t> groups(v.size() / 2, 0);
  26. groups.resize(v.size(), 1);
  27.  
  28. do {
  29. do_job(v, groups);
  30. } while (std::next_permutation(groups.begin(), groups.end()));
  31. }
  32.  
  33. int main()
  34. {
  35. std::vector<int> numbers = {1, 2, 3, 4};
  36. print_combinations(numbers);
  37. }
  38.  
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
 e( 1 2, 3 4)
 e( 1 3, 2 4)
 e( 1 4, 2 3)
 e( 2 3, 1 4)
 e( 2 4, 1 3)
 e( 3 4, 1 2)