Можно ли определить два `istream_iterator`s` для одного файла? - PullRequest
2 голосов
/ 21 ноября 2010
ifstream file1;
file1.open("in1.txt");
istream_iterator<string> iterator1(file1);
copy(istream_iterator<string>(file1), istream_iterator<string>(), back_inserter(lstr));

Можем ли мы иметь два итератора входного потока, указывающие на один файл?Как и в приведенном выше случае, итератор становится продвинутым (только один раз, как и должно быть), и первый элемент (строка) отсутствует в копии.Есть ли возможный путь?

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

Можно, но если продвинуться один, указатель файла будет продвигаться вместе с ним, так что это повлияет на следующее продвижение другого. Кроме того, итератор продвигается один раз при создании, поэтому не создавайте его, пока он вам не понадобится.

1 голос
/ 21 ноября 2010

Стандарт устанавливает значение 24.1.1 в качестве примечания, следующего из правил требований. И так как все хотят услышать Standardese, я цитирую это

[Примечание: для итераторов ввода a == b не означает ++ a == ++ b. (Равенство не гарантирует свойство подстановки или ссылочную прозрачность.) Алгоритмы на входных итераторах никогда не должны пытаться пройти через один и тот же итератор дважды. Они должны быть однопроходными алгоритмами.

...