Advertisement
avr39ripe

PV913STLArrayDiffer

Aug 17th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. template <class InIter>
  6. InIter dedup(InIter begin, InIter end)
  7. {
  8.     InIter next{ begin };
  9.     ++next;
  10.     InIter out{ begin };
  11.  
  12.     while (begin != end)
  13.     {
  14.         if ((next != end) and (*begin != *next))
  15.         {
  16.             *out++ = *begin++;
  17.             ++next;
  18.         }
  19.         else
  20.         {
  21.             std::advance(begin, 2);
  22.  
  23.             for (int cnt{ 0 }; next != end and cnt < 2; ++cnt, std::advance(next, 1));
  24.            
  25.         }
  26.     }
  27.     return out;
  28. }
  29.  
  30. int main()
  31. {
  32.     std::vector<int> arrA{ 6,1,4,2,8,9,11,26,2,7,8,11,2,2,3 };
  33.     std::vector<int> arrB{ 1,8,29,2,2,9,11,1,2,5,8,34,12,9,8 };
  34.  
  35.     std::sort(arrA.begin(), arrA.end());
  36.     std::sort(arrB.begin(), arrB.end());
  37.  
  38.     std::copy(arrA.begin(), arrA.end(), std::ostream_iterator<int>(std::cout, " "));
  39.     std::cout << '\n';
  40.     std::copy(arrB.begin(), arrB.end(), std::ostream_iterator<int>(std::cout, " "));
  41.     std::cout << '\n';
  42.  
  43.     std::cout << '\n';
  44.     auto aUinque{ std::unique(arrA.begin(), arrA.end()) };
  45.     auto bUinque{std::unique(arrB.begin(), arrB.end())};
  46.  
  47.     std::copy(arrA.begin(), aUinque, std::ostream_iterator<int>(std::cout, " "));
  48.     std::cout << '\n';
  49.     std::copy(arrB.begin(), bUinque, std::ostream_iterator<int>(std::cout, " "));
  50.     std::cout << '\n';
  51.     std::cout << '\n';
  52.  
  53.     std::vector<int> res;
  54.     std::merge(arrA.begin(), aUinque, arrB.begin(), bUinque, std::inserter(res, res.begin()));
  55.     std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout, " "));
  56.     std::cout << '\n';
  57.     std::cout << '\n';
  58.  
  59.     dedup(res.begin(), res.end());
  60.  
  61.     std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout, " "));
  62.     std::cout << '\n';
  63.  
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement