#include <iostream>
#include <iterator>
#include <list>
template<class FwdIt>
FwdIt remove_nth(FwdIt p, FwdIt q, size_t const n)
{
for (size_t i = 0; i < n && p != q; ++i, ++p) { }
if (p == q) {
return q;
}
auto lastValidIterator = p++;
for (; p != q; ++p) {
std::iter_swap(lastValidIterator, p);
lastValidIterator = p;
}
return lastValidIterator;
}
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"));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxsaXN0PgoKdGVtcGxhdGU8Y2xhc3MgRndkSXQ+CkZ3ZEl0IHJlbW92ZV9udGgoRndkSXQgcCwgRndkSXQgcSwgc2l6ZV90IGNvbnN0IG4pCnsKCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbiAmJiBwICE9IHE7ICsraSwgKytwKSB7IH0KCWlmIChwID09IHEpIHsKCQlyZXR1cm4gcTsKCX0KCQoJYXV0byBsYXN0VmFsaWRJdGVyYXRvciA9IHArKzsKCWZvciAoOyBwICE9IHE7ICsrcCkgewoJCXN0ZDo6aXRlcl9zd2FwKGxhc3RWYWxpZEl0ZXJhdG9yLCBwKTsKCQlsYXN0VmFsaWRJdGVyYXRvciA9IHA7Cgl9CgoJcmV0dXJuIGxhc3RWYWxpZEl0ZXJhdG9yOwp9CgppbnQgbWFpbigpCnsKCXN0ZDo6bGlzdDxpbnQ+IGxzID0geyAxLCAyLCAzLCA0LCA1IH07Cglscy5lcmFzZShyZW1vdmVfbnRoKGxzLmJlZ2luKCksIGxzLmVuZCgpLCAyKSk7CglzdGQ6OmNvcHkobHMuYmVnaW4oKSwgbHMuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIlxuIikpOwoKCXJldHVybiAwOwp9