std::vector<int> v; v.reserve(100); を実行した直後の v.size() の値はどれですか?
reserve は内部のメモリ領域(capacity)を事前に確保するだけで、要素は追加しません。そのため reserve(100) の直後でも size() は0のままで、capacity() が100以上になります。要素数を100にしたい場合は resize(100) を使います。resize は要素を実際に生成して size を変えます。reserve は push_back を繰り返す際の再確保とコピーを減らす最適化として有効です。なお reserve 後に要素数を超えない範囲で追加している間は、イテレータや参照が無効になりません。