#include <iterator> // for std::begin/std::end
#include <utility>  // for std::declval

template<class Iter>
class java_iter_wrapper
{
public:
    typedef typename std::iterator_traits<Iter>::value_type value_type;
    typedef typename std::iterator_traits<Iter>::reference reference;

    java_iter_wrapper(Iter b, Iter e)
    : beg_(b), end_(e)
    {}

    bool hasNext() const {return beg_!=end_;}

    reference next() {return *beg_++;}

private:
    Iter beg_, end_;
};

namespace jih { // java iterator helper
    using std::begin;
    using std::end;

    template<class Container>
    using CppIterOf = decltype(begin(std::declval<Container&>()));
}

template<class Container>
java_iter_wrapper<jih::CppIterOf<Container>> get_java_iter(Container& c)
{
    using std::begin;
    using std::end;
    return java_iter_wrapper<jih::CppIterOf<Container>>(begin(c),end(c));
}

// ---- Anwendungsbeispiel ----

#include <iostream>
#include <vector>

int main()
{
    using namespace std;
    vector<int> foo = {2,3,5,7};
    auto jit = get_java_iter(foo);
    while (jit.hasNext()) {
        int z = jit.next();
        cout << z << endl;
    }
}
