Advertisement
VinnRonn

tmp

Jul 19th, 2022 (edited)
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <numeric>
  4. #include <sstream>
  5. #include <vector>
  6. #include <iterator>
  7.  
  8. using namespace std;
  9.  
  10. // функция, записывающая элементы диапазона в строку
  11. template <typename It>
  12. string PrintRangeToString(It range_begin, It range_end) {
  13. // удобный тип ostringstream -> https://ru.cppreference.com/w/cpp/io/basic_ostringstream
  14. ostringstream out;
  15. for (auto it = range_begin; it != range_end; ++it) {
  16. out << *it << " "s;
  17. }
  18. out << endl;
  19. // получаем доступ к строке с помощью метода str для ostringstream
  20. return out.str();
  21. }
  22.  
  23. template<typename It>
  24. auto MakeVector(It range_begin, It range_end) {
  25. return vector(range_begin, range_end);
  26. }
  27. template<typename Iterator>
  28. vector<string> GetPermutations(Iterator start, Iterator end) {
  29.  
  30. auto input_vector = MakeVector(start, end);
  31. sort(input_vector.begin(), input_vector.end(), [](char lhs, char rhs) {return lhs > rhs; });
  32.  
  33. vector<string> result_v;
  34.  
  35. ostringstream oss;
  36. int size = input_vector.size();
  37. int separator_size = size - 1;
  38. do {
  39. string bs;
  40. string tm;
  41. copy(input_vector.begin(), input_vector.end() - 1, ostream_iterator<int>(oss, " "));
  42. oss << input_vector.back();
  43. bs = oss.str();
  44.  
  45. tm.assign(bs.end() - (size + separator_size), bs.end());
  46. result_v.push_back(tm);
  47. bs.clear();
  48.  
  49. } while (prev_permutation(input_vector.begin(), input_vector.end()));
  50.  
  51. return result_v;
  52. }
  53.  
  54. int main() {
  55. vector<int> permutation(3);
  56. // iota -> http://ru.cppreference.com/w/cpp/algorithm/iota
  57. // Заполняет диапазон последовательно возрастающими значениями
  58. iota(permutation.begin(), permutation.end(), 1);
  59.  
  60. auto result = GetPermutations(permutation.begin(), permutation.end());
  61. for (const auto& s : result) {
  62. cout << s;
  63. //cout << endl;
  64. }
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement