fork(1) download
  1. #include <iostream>
  2. #include <iterator>
  3. #include <list>
  4.  
  5. template<class FwdIt>
  6. FwdIt remove_nth(FwdIt p, FwdIt q, size_t n)
  7. {
  8. if (std::distance(p, q) == 0) return p;
  9. if (std::distance(p, q) < n) return q;
  10.  
  11. for (size_t i = 0; i < n; ++p, ++i);
  12. for (++p; p != q; ++p)
  13. {
  14. std::iter_swap(p, std::prev(p));
  15. }
  16.  
  17. return std::prev(p);
  18. }
  19.  
  20. int main()
  21. {
  22. std::list<int> ls = { 1, 2, 3, 4, 5 };
  23. ls.erase(remove_nth(ls.begin(), ls.end(), 2));
  24. std::copy(ls.begin(), ls.end(), std::ostream_iterator<int>(std::cout, "\n"));
  25.  
  26. std::list<int> xs = {};
  27. ls.erase(remove_nth(ls.begin(), ls.end(), 2));
  28.  
  29. return 0;
  30. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1
2
4
5