>175
vector<string>::iterator って書き方したことない?
vector<string> のイテレータの型が vector<string>::iterator。
で、この vector<string>::iterator の差の型が vector<string>::difference_type になる。

istream_iterator に対してテンプレート引数 Distance を指定するということは、その istream_iterator
の差が Distance 型になるということだ。
istream_iterator は Input iterator なので実質 distance() が返す型が Distance 型になるってことだな。
ほとんど意味がない。
なのでわざわざ Distance を指定せずデフォルトにまかせるのが普通。

なお、istream_iterator の宣言は↓の通りなのでそのコード間違ってるよ?
template <class T, class charT = char, class traits = char_traits<charT>, class Distance = ptrdiff_t>
class istream_iterator: