#include <iostream>
#include <algorithm>
#include <vector>

using Iterator=std::vector<int>::iterator;
template<class Func>
void foo(Iterator begin,Iterator end,Func f)
{
    for(Iterator it=begin; it != end-1;++it)
    {
         auto f2=[&begin,&f](int& lhs,int& rhs){
            std::cout<<&(*begin)<<"\n"<<&lhs<<"  "<<&rhs;
            f(lhs,rhs);
        };

         f2(*it,*(it+1));
    }
}

int main()
{
    std::vector<int> a{1,5,3,4,7};

    foo(a.begin(),a.end(),[](int& lhs,int& rhs){
        std::cout<<"\n"<<&lhs<<"  "<<&rhs<<"\n\n\n";
    });
}
