С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
1

istream_iterator

01.04.2012, 17:42. Показов 4058. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане! Прошу ответить на следующий вопрос - почему, когда создается istream_iterator пустым конструктором (например, в алгоритме copy для указания конца потока/файла), то вызывается конструктор объекта того класса, который мы передаем в качестве шаблонного аргумента?? Т.е., почему он вообще вызывается?

Пример:

C++
1
2
3
4
5
6
7
8
9
....
class Test
{
public:
    Test() { cout << "!!!" << endl; }
};
....
istream_iterator<Test>();
...
Заранее благодарен!
P.s. в библиотеке iterator смотрел. Может невнимательно, но ничего "очевидного" не нашел.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2012, 17:42
Ответы с готовыми решениями:

istream_iterator
Почему столько ошибок? И как их исправить? Программа из книги, но почему-то не работает. #include...

istream_iterator
Каким образом итератор std::istream_iterator&lt;int&gt; ii(std::cin); определяет сколько строк надо...

Istringstream, istream_iterator
std::string string1 std::cout &lt;&lt; &quot;Введите первую неубывающую последовательность натуральных чисел:...

Istream_iterator back_inserter
привет всем ! есть такой код vector&lt;int&gt; vec; copy(istream_iterator&lt;int&gt;(cin),...

4
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
01.04.2012, 17:51 2
потому что описан этот итератор как-то так
C++
1
2
3
4
5
6
template <class T, .... еще параметры...>
class istream_iterator : public iterator<...>
{
  T value;
  ....
}
можешь у себя в заголовках глянуть для более подробного.
1
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
01.04.2012, 18:06  [ТС] 3
villu, спасибо.. Невнимательность, как я уже и писал
Попутно вопрос в тему - как этот самый istream_iterator, созданный пустым конструктором, указывает на конец файла/потока (причем я ему даже не даю знать, с чем я работаю (файл/поток)). Ну, на примере того же copy:

C++
1
2
3
4
5
....
ifstream f_In("---.txt");
...
copy(istream_iterator<int>(f_In), istream_iterator<int>(), ostream_iterator<int>(cout, " "));
...
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
01.04.2012, 18:16 4
ну на самом деле он содержит в себе еще и указатель на basic_istream, который, при создании по-умолчанию устанавливается в NULL.
Далее, что происходит, когда создается итератор с указанием потока:

При считывании с потока идет проверка преобразования данных в значение
C++
1
stream_ >> value; // stream_ - указатель, член класса, который указывает на то, что передано в конструкторе, например  istream_iterator<int>(cin, ...)
и если это не возможно
C++
1
2
if(!(*stream_ >> value))
    stream_ = NULL;
.. сбрасывается указатель. Естественно есть сначала проверка на то, что он не NULL
И того имеем:
C++
1
2
3
4
istream_iterator<...>& operator++() {
    if ( stream_ && !(*stream_ >> value)) stream_=NULL;
    return *this;
}
вот как-то так, если память не изменяет.
1
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
01.04.2012, 18:27  [ТС] 5
villu, еще раз благодарю! Вопрос закрыт
0
01.04.2012, 18:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2012, 18:27
Помогаю со студенческими работами здесь

Borland c++ 5.02 ругается на istream_iterator
Здравствуйте. Компилятор старый, но нужен именно он. В инклудах есть iterator.h Не могу запустить...

Visual studio и istream_iterator
проблема в том, что visual studio 2013 не хочет вводить из файла строки в вектор строк с помощью...

Отличие istreambuf_iterator от istream_iterator
Прочитал все найденные похожие темы... Протестировал все, что можно... Но отличий так найти и не...

Как исправить код с istream_iterator?
Как исправить этот код, чтобы ввод заканчивался при вводе слова quit? Можно ли сделать с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru