Дальнейшие эксперименты могут показать, что вам даже не нужно разыменовывать итератор, чтобы он работал.:)
ost = str_vec[index];
Все эти неактивные методы необходимы для того, чтобы потоковые итераторы были похожи на интерфейсы с другими итераторами.
Вместо ручного цикла вы можете использовать std::copy
алгоритм.(Так как это почти все, для чего подходит ostream_iterator
, это своего рода ответ на ваш вопрос: вам вообще не нужно возиться с этими итераторами в вашем собственном коде!)
std::copy(str_vec.begin(), str_vec.end(), std::ostream_iterator<std::string>(ofs, "\n"));
Учитываякак написан шаблон функции копирования, может стать ясно, где необходимы приращения и разыменование:
template <class InIter, class OutIter>
void copy(InIter begin, InIter end, OutIter result)
{
for (InIter it = begin; it != end; ++it)
*result++ = *it; // <-- here, result might be almost any kind of iterator
}