fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. template <typename T, typename F>
  6. void BreadthFirstCombination(const std::vector<T>& v, F f)
  7. {
  8. for (int i = 0; i != v.size() + 1; ++i) {
  9. std::vector<bool> mask(i, true);
  10. mask.resize(v.size(), false);
  11. do {
  12. f(v, mask);
  13. } while (std::prev_permutation(mask.begin(), mask.end()));
  14. }
  15. }
  16.  
  17. int main() {
  18.  
  19. auto printer = [](const auto&v, const std::vector<bool>& mask)
  20. {
  21. for (std::size_t i = 0; i != v.size(); ++i) {
  22. if (mask[i]) {
  23. std::cout << v[i] << " ";
  24. }
  25. }
  26. std::cout << std::endl;
  27. };
  28. std::vector<int> v = {1, 2, 4};
  29. BreadthFirstCombination(v, printer);
  30. }
  31.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1 
2 
4 
1 2 
1 4 
2 4 
1 2 4