fork download
  1. #include <iostream>
  2. #include <iterator>
  3. #include <string>
  4.  
  5.  
  6. template<typename Container>
  7. Container unique_only_copy(Container container) {
  8. auto first = std::begin(container);
  9. auto const last = std::end(container);
  10.  
  11. if (first != last) {
  12. auto second = std::next(first);
  13.  
  14. if (second != last) {
  15. auto result = first;
  16.  
  17. do {
  18. if (*first == *second) {
  19. while (++second != last && *first == *second);
  20.  
  21. if (second == last) {
  22. break;
  23. }
  24.  
  25. first = second;
  26. } else {
  27. *result++ = *first++;
  28. }
  29.  
  30. if (++second == last) {
  31. *result++ = *first;
  32. }
  33. } while (second != last);
  34.  
  35. container.erase(result, last);
  36. }
  37. }
  38.  
  39. return container;
  40. }
  41.  
  42.  
  43. int main() {
  44. std::cout << "'" << unique_only_copy(std::string("")) << "'" << std::endl;
  45. std::cout << "'" << unique_only_copy(std::string("a")) << "'" << std::endl;
  46. std::cout << "'" << unique_only_copy(std::string("ab")) << "'" << std::endl;
  47. std::cout << "'" << unique_only_copy(std::string("aa")) << "'" << std::endl;
  48. std::cout << "'" << unique_only_copy(std::string("aaa")) << "'" << std::endl;
  49. std::cout << "'" << unique_only_copy(std::string("abb")) << "'" << std::endl;
  50. std::cout << "'" << unique_only_copy(std::string("aab")) << "'" << std::endl;
  51. std::cout << "'" << unique_only_copy(std::string("aabcc")) << "'" << std::endl;
  52. std::cout << "'" << unique_only_copy(std::string("abbc")) << "'" << std::endl;
  53. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
''
'a'
'ab'
''
''
'a'
'b'
'b'
'ac'