#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
template<typename Cont, typename It, class Pr>
void erase_neighbors(Cont &cont, It first, It last, int nSpan, Pr Pred)
{
if (0 < nSpan && nSpan < std::distance(first, last)) for (It it2; (it2 = first), first != last; )
{
if (nSpan < std::distance(it2, last))
{
std::advance(it2, nSpan);
if (Pred(*first, *it2))
{
first = cont.erase(first, it2);
last = cont.end();
continue;
}
}
++first;
}
}
int main()
{
std::vector<char> vc;
vc.push_back('a');
vc.push_back('b');
vc.push_back('a');
vc.push_back('d');
vc.push_back('e');
vc.push_back('d');
vc.push_back('f');
std::copy(vc.begin(), vc.end(), std::ostream_iterator<char>(std::cout, ", "));
std::cout << std::endl;
erase_neighbors(vc, vc.begin(), vc.end(), 2, [](char rhs, char lhs) {
return rhs == lhs;
});
std::copy(vc.begin(), vc.end(), std::ostream_iterator<char>(std::cout, ", "));
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+CgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBDb250LCB0eXBlbmFtZSBJdCwgY2xhc3MgUHI+CnZvaWQgZXJhc2VfbmVpZ2hib3JzKENvbnQgJmNvbnQsIEl0IGZpcnN0LCBJdCBsYXN0LCBpbnQgblNwYW4sIFByIFByZWQpCnsKCWlmICgwIDwgblNwYW4gJiYgblNwYW4gPCBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KSkgZm9yIChJdCBpdDI7IChpdDIgPSBmaXJzdCksIGZpcnN0ICE9IGxhc3Q7ICkKICAgIHsKICAgIAlpZiAoblNwYW4gPCBzdGQ6OmRpc3RhbmNlKGl0MiwgbGFzdCkpCiAgICAgICAgewogICAgICAgICAgICBzdGQ6OmFkdmFuY2UoaXQyLCBuU3Bhbik7CiAgICAgICAgICAgIGlmIChQcmVkKCpmaXJzdCwgKml0MikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZpcnN0ID0gY29udC5lcmFzZShmaXJzdCwgaXQyKTsKICAgICAgICAgICAgICAgIGxhc3QgPSBjb250LmVuZCgpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKytmaXJzdDsKICAgIH0KfQoKCgppbnQgbWFpbigpIAp7CglzdGQ6OnZlY3RvcjxjaGFyPiB2YzsKCgl2Yy5wdXNoX2JhY2soJ2EnKTsKCXZjLnB1c2hfYmFjaygnYicpOwoJdmMucHVzaF9iYWNrKCdhJyk7Cgl2Yy5wdXNoX2JhY2soJ2QnKTsKCXZjLnB1c2hfYmFjaygnZScpOwoJdmMucHVzaF9iYWNrKCdkJyk7Cgl2Yy5wdXNoX2JhY2soJ2YnKTsKCglzdGQ6OmNvcHkodmMuYmVnaW4oKSwgdmMuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxjaGFyPihzdGQ6OmNvdXQsICIsICIpKTsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgoJZXJhc2VfbmVpZ2hib3JzKHZjLCB2Yy5iZWdpbigpLCB2Yy5lbmQoKSwgMiwgW10oY2hhciByaHMsIGNoYXIgbGhzKSB7CgkJcmV0dXJuIHJocyA9PSBsaHM7Cgl9KTsKCglzdGQ6OmNvcHkodmMuYmVnaW4oKSwgdmMuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxjaGFyPihzdGQ6OmNvdXQsICIsICIpKTsKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=