I have a class X, which I provide a snippet of here:
class X {
public:
template
X(Iter begin, Iter end) : mVec(begin, end) {}
Your static method might not be as bad as you think, depending on the optimization your compiler does. And in C++0x, move constructors will remove any copying that is currently taking place.
In the meantime go with a wrapper iterator. The code is not likely to be as bad as the thread avakar links to, since you only need to implement an input iterator.