2010-11-20 3 views
2
ifstream file1; 
file1.open("in1.txt"); 
istream_iterator<string> iterator1(file1); 
copy(istream_iterator<string>(file1), istream_iterator<string>(), back_inserter(lstr)); 

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

+1

Ждать. _Каким-то итератором становится передовым/разыменованным, а в _what order_ ?? – sbi

+0

Итератор, создаваемый в функции копирования (первый аргумент), не указывает на первый элемент в файле. – ajayreddy

ответ

2

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

+0

Что означает, что входной итератор «продвигается»? – sbi

+0

@sbi: std :: advance или increment. –

+0

@Fred Разве это не пара для итераторов ввода? – sbi

1

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

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

+1

Я понятия не имею, что это будет означать на простом английском языке. Эти ребята стандартизации вообще не имеют смысла в прозе. – sbi