fork download
  1. #include <list>
  2. #include <cassert>
  3.  
  4. template <typename It>
  5. It safe_next(It it, std::size_t steps, It end)
  6. {
  7. while (it!=end && steps--)
  8. it++;
  9.  
  10. return it;
  11. }
  12.  
  13. int main()
  14. {
  15. std::list<int> l { 1,2,3,4,5,6,7,8 };
  16. auto it = begin(l);
  17.  
  18. assert(safe_next(it, 3, end(l)) == std::next(it, 3));
  19. assert(safe_next(it, 30, end(l)) == end(l));
  20. assert(next(it, std::min(30, std::distance(it, end(l)))) == end(l));
  21. }
  22.  
  23.  
Success #stdin #stdout 0s 2980KB
stdin
Standard input is empty
stdout
Standard output is empty