fork(1) download
  1. // Jarod42
  2.  
  3. #include <algorithm>
  4. #include <cassert>
  5. #include <iostream>
  6. #include <iterator>
  7. #include <vector>
  8.  
  9. bool increase(std::vector<bool>& bs)
  10. {
  11. for (std::size_t i = 0; i != bs.size(); ++i) {
  12. bs[i] = !bs[i];
  13. if (bs[i] == true) {
  14. return true;
  15. }
  16. }
  17. return false; // overflow
  18. }
  19.  
  20. template <typename T>
  21. void PowerSet(const std::vector<T>& v)
  22. {
  23. std::vector<bool> bitset(v.size());
  24.  
  25. do {
  26. for (std::size_t i = 0; i != v.size(); ++i) {
  27. if (bitset[i]) {
  28. std::cout << v[i] << " ";
  29. }
  30. }
  31. std::cout << std::endl;
  32. } while (increase(bitset));
  33. }
  34.  
  35. int main()
  36. {
  37. std::vector<char> vc{ 'A', 'B', 'C', 'D' };
  38. std::cout << "\n------POWERSET-------------\n";
  39. PowerSet(vc);
  40. }
  41.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
------POWERSET-------------

A 
B 
A B 
C 
A C 
B C 
A B C 
D 
A D 
B D 
A B D 
C D 
A C D 
B C D 
A B C D