>>433
shoot.erase(T++)の実行順序は、
1. Tの値を引数として保存
2. T++を実行
3. 保存された引数をshoot.eraseに渡す(この結果旧Tの指していた要素は消滅する)

だよ。
これがshoot.erase(T); T++;になると:
1. Tの値を引数としてshoot.eraseを実行し、Tの要素が消滅しているため無効になる
2. 無効になってしまったTに対してT++を実行するのは駄目