fork(3) download
  1. #include <iostream>
  2. #include <iterator>
  3. #include <vector>
  4.  
  5. template <class Input1, class Input2,
  6. class Output1, class Output2, class Output3>
  7. Output3 decompose_sets(Input1 first1, Input1 last1,
  8. Input2 first2, Input2 last2,
  9. Output1 result1, Output2 result2,
  10. Output3 result3)
  11. {
  12. while (first1 != last1 && first2 != last2) {
  13. if (*first1 < *first2) {
  14. *result1++ = *first1++;
  15. } else if (*first2 < *first1) {
  16. *result2++ = *first2++;
  17. } else {
  18. *result3++ = *first1++;
  19. ++first2; // skip common value in set2
  20. }
  21. }
  22. std::copy(first1, last1, result1);
  23. std::copy(first2, last2, result2);
  24. return result3;
  25. }
  26.  
  27. int main()
  28. {
  29. int data1[] = { 0, 2, 3, 4, 5, 7, 8, 9 };
  30. int data2[] = { 1, 2, 4, 6, 8, 10 };
  31. std::vector<int> one, two, three;
  32.  
  33. decompose_sets(
  34. std::begin(data1), std::end(data1),
  35. std::begin(data2), std::end(data2),
  36. back_inserter(one),
  37. back_inserter(two),
  38. back_inserter(three)
  39. );
  40.  
  41. for (auto value : one) {
  42. std::cout << value << ' ';
  43. }
  44. std::cout << '\n';
  45. for (auto value : two) {
  46. std::cout << value << ' ';
  47. }
  48. std::cout << '\n';
  49. for (auto value : three) {
  50. std::cout << value << ' ';
  51. }
  52. std::cout << '\n';
  53. }
  54.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
0 3 5 7 9 
1 6 10 
2 4 8