vector<int> v;
v.reserve(1000);
for(int i=0; i<1000; ++i) v[i]=i;

とした後に、

vector<int>::iterator it;
for(it=v.begin(); it!=v.end(); ++it) cout<< *it <<endl;

としてもうまくいきません。v.end()がv[1000]の次を指していないため
ですが、v.end()を設定する方法ってあるんでしょうか?

それとも、reserveとiteratorは相性が悪いのでしょうか?