fork download
  1.  
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <list>
  6. #include <array>
  7. #include <iterator>
  8. #include <algorithm>
  9.  
  10. template<class ReversibleContainer>
  11. void add1(ReversibleContainer &arr, const typename ReversibleContainer::value_type &val, const int code = 0)
  12. {
  13. int step = 1;
  14. auto beg = arr.begin();
  15. auto end = arr.end();
  16. auto count = std::distance(beg, end);
  17.  
  18. if (code < 0) {
  19. count = -code;
  20. step = -1;
  21. std::swap(beg, end);
  22. }
  23. else if(code > 0) {
  24. count = code;
  25. }
  26.  
  27. for(; count > 0 && beg != end; std::advance(beg, step))
  28. {
  29. auto& cur = *beg;
  30. if( cur == val )
  31. cur++, count--;
  32. }
  33. }
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37. std::vector<int> vec = {1,4,1,5,1};
  38. std::list<int> lst = {1,4,1,5,1};
  39. std::array<int,5> arr = {1,4,1,5,1};
  40.  
  41. add1(vec, 1, 0);
  42. add1(lst, 1, 2);
  43. add1(arr, 1, -2);
  44.  
  45. for(auto b = vec.begin(); b != vec.end(); ++b)
  46. std::cout << *b << " ";
  47. std::cout << std::endl;
  48.  
  49. for(auto b = lst.begin(); b != lst.end(); ++b)
  50. std::cout << *b << " ";
  51. std::cout << std::endl;
  52.  
  53. for(auto b = arr.begin(); b != arr.end(); ++b)
  54. std::cout << *b << " ";
  55. std::cout << std::endl;
  56.  
  57. return 0;
  58. }
Success #stdin #stdout 0s 3064KB
stdin
Standard input is empty
stdout
2 4 2 5 2 
2 4 2 5 1 
1 4 2 5 2