#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;
}