#include <iostream>
#include <iterator>
#include <list>
template<class FwdIt>
FwdIt remove_nth(FwdIt p, FwdIt q, size_t n)
{
if (std::distance(p, q) == 0) return p;
if (std::distance(p, q) < n) return q;
for (size_t i = 0; i < n; ++p, ++i);
for (++p; p != q; ++p)
{
std::iter_swap(p, std::prev(p));
}
return std::prev(p);
}
int main()
{
std::list<int> ls = { 1, 2, 3, 4, 5 };
ls.erase(remove_nth(ls.begin(), ls.end(), 2));
std::copy(ls.begin(), ls.end(), std::ostream_iterator<int>(std::cout, "\n"));
std::list<int> xs = {};
ls.erase(remove_nth(ls.begin(), ls.end(), 2));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxsaXN0PgoKdGVtcGxhdGU8Y2xhc3MgRndkSXQ+CkZ3ZEl0IHJlbW92ZV9udGgoRndkSXQgcCwgRndkSXQgcSwgc2l6ZV90IG4pCnsKCWlmIChzdGQ6OmRpc3RhbmNlKHAsIHEpID09IDApIHJldHVybiBwOwoJaWYgKHN0ZDo6ZGlzdGFuY2UocCwgcSkgPCBuKSAgcmV0dXJuIHE7CgoJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK3AsICsraSk7Cglmb3IgKCsrcDsgcCAhPSBxOyArK3ApCgl7CgkJc3RkOjppdGVyX3N3YXAocCwgc3RkOjpwcmV2KHApKTsKCX0KCglyZXR1cm4gc3RkOjpwcmV2KHApOwp9CgppbnQgbWFpbigpCnsKCXN0ZDo6bGlzdDxpbnQ+IGxzID0geyAxLCAyLCAzLCA0LCA1IH07Cglscy5lcmFzZShyZW1vdmVfbnRoKGxzLmJlZ2luKCksIGxzLmVuZCgpLCAyKSk7CglzdGQ6OmNvcHkobHMuYmVnaW4oKSwgbHMuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIlxuIikpOwoKCXN0ZDo6bGlzdDxpbnQ+IHhzID0ge307Cglscy5lcmFzZShyZW1vdmVfbnRoKGxzLmJlZ2luKCksIGxzLmVuZCgpLCAyKSk7CgoJcmV0dXJuIDA7Cn0=