Итератор входного потока (Istream Iterator)
Итератор входного потока (Istream Iterator)
istream_iterator‹T› читает (используя operator››) последовательные элементы из входного потока, для которого он был создан. После своего создания итератор каждый раз при использовании ++ читает и сохраняет значение T. Если достигнут конец потока (operator void* () в потоке возвращает false), итератор становится равным значению end-of-stream (конец-потока). Конструктор без параметров istream_iterator() всегда создаёт итераторный объект конца потокового ввода, являющийся единственым законным итератором, который следует использовать для конечного условия. Результат operator* для конца потока не определён, а для любого другого значения итератора возвращается const T&.
Невозможно записывать что-либо с использованием входных итераторов. Основная особенность входных итераторов - тот факт, что операторы ++ не сохраняют равенства, то есть i==j не гарантирует вообще, что ++i==++j. Каждый раз, когда ++ используется, читается новое значение. Практическое следствие этого факта - то, что входные итераторы могут использоваться только для однопроходных алгоритмов, что действительно имеет здравый смысл, так как многопроходным алгоритмам всегда более соответствует использование структур данных в оперативной памяти.
Два итератора конец-потока всегда равны. Итератор конец-потока не равен не-конец-потока итератору. Два не-конец-потока итератора равны, когда они созданы из того же самого потока.
template ‹class T, class Distance = ptrdiff_t›
class istream_iterator: public input_iterator‹T, Distance› {
friend bool operator==(const istream_iterator‹T, Distance›& x, const istream_iterator‹T, Distance›& y);
public:
istream_iterator();
istream_iterator(istream& s);
istream_iterator(const istream_iterator‹T, Distance›& x);
~istream_iterator();
const T& operator*() const;
istream_iterator‹T, Distance›& operator++();
istream_iterator‹T, Distance› operator++(int);
};
template ‹class T, class Distance›
bool operator==(const istream_iterator‹T, Distance›& x, const istream_iterator‹T, Distance›& y);
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Зона потока
Зона потока О сверхпроизводительном состоянии, называемом «потоком» (flow), написано много литературы. Некоторые программисты называют его «зоной». Как бы оно ни называлось, вероятно, вам знакомо это ощущение предельной концентрации сознания, в которое может войти
Создание потока
Создание потока Поток создается при первом открытии с помощью системного вызова специального файла устройства, ассоциированного с драйвером STREAMS. Как правило, процесс создает поток в два этапа: сначала создается элементарный поток, состоящий из нужного драйвера и
Создание входного файла
Создание входного файла Откройте программу pspice.exe (рис. В.3) и выберите позиции меню File, New, Text File, как показано на рис. В.4. Рис. B.3. Пиктограммы на рабочем столе PSpice Рис. В.4. Создание текстового файла на PSpiceПоявится пустое окно с мигающим курсором, позволяющее ввести текст.
Изменение входного файла
Изменение входного файла Чтобы извлечь больше информации из анализа на PSpice, изменим входной файл (с расширением *.cir), добавив две следующие строки..DC VS 24V 24V 24V.PRINT DC I(R1) I(R2) I(R3)и снова запустим процесс моделирования. **** 09/08/99 10:48:54 ******* Evaluation PSpice (Nov 1998) *******First Circuit for PSpice**** CIRCUIT
Определение полного входного сопротивления в цепях переменного тока
Определение полного входного сопротивления в цепях переменного тока Рассмотрим «черный ящик», содержащий цепь с неизвестным полным сопротивлением, показанный на рис. 2.16. С помощью команды .PRINT вы можете вывести и V(I), и I(R). Однако эта команда не позволяет вывести значение
Определение входного сопротивления
Определение входного сопротивления Желательно, кроме того, найти входное сопротивление со стороны источника входного напряжения. Если мы просто используем команду.TF V(4) vsрезультаты будут некорректными. Вы можете это сделать и посмотреть, что получится. Удаление
Совет 26. Старайтесь использовать iterator вместо const_iterator, reverse_iterator и const_reverse_iterator
Совет 26. Старайтесь использовать iterator вместо const_iterator, reverse_iterator и const_reverse_iterator Как известно, каждый стандартный контейнер поддерживает четыре типа итераторов. Для контейнера container<T> тип iterator работает как Т* тогда как const_iterator работает как const Т* (также встречается запись
Совет 27. Используйте distance и advance для преобразования const_iterator в iterator
Совет 27. Используйте distance и advance для преобразования const_iterator в iterator Как было сказано в совете 26, некоторые функции контейнеров, вызываемые с параметрами-итераторами, ограничиваются типом iterator; const_iterator им не подходит. Что же делать, если имеется const_iterator и вы хотите вставить
Теги итераторов (Iterator tags)
Теги итераторов (Iterator tags) Чтобы осуществлять алгоритмы только в терминах итераторов, часто бывает необходимо вывести тип значения и тип расстояния из итератора. Для решения этой задачи требуется, чтобы для итератора i любой категории, отличной от итератора вывода,
Операции с итераторами (Iterator operations)
Операции с итераторами (Iterator operations) Так как только итераторы произвольного доступа обеспечивают + и - операторы, библиотека предоставляет две шаблонные функции advance и distance. Эти функции используют + и - для итераторов произвольного доступа (и имеют, поэтому, сложность
Итератор выходного потока (Ostream Iterator)
Итератор выходного потока (Ostream Iterator) istream_iterator‹T› записывает (используя operator‹‹) последовательные элементы в выходной поток, из которого он был создан. Если он был создан с параметром конструктора char*, эта строка, называемая строкой разделителя (delimiter string), записывается в
Адаптеры итераторов (Iterator adaptors)
Адаптеры итераторов (Iterator adaptors) Обратные итераторы (Reverse iterators) Двунаправленные итераторы и итераторы произвольного доступа имеют соответствующие адаптеры обратных итераторов, которые выполняют итерации через структуру данных в противоположном направлении.Они имеют
12.4.4. Итератор istream_iterator
12.4.4. Итератор istream_iterator В общем виде объявление потокового итератора чтения istream_iterator имеет формуistream_iterator identifier( istream& );1.Если имеющийся у Вас компилятор пока не поддерживает параметр шаблонов по умолчанию, то конструктору istream_iterator необходимо будет явно передать также и
12.4.5. Итератор ostream_iterator
12.4.5. Итератор ostream_iterator Объявление потокового итератора записи ostream_iterator может быть представлено в двух формах:Если бы компилятор полностью удовлетворял стандарту C++, достаточно было бы написать так:istream_iterator input_set1( infile1 ), eos;istream_iterator input_set2( infile2 );ostream_iterator identifier( ostream&
8.4.2 Состояния Потока
8.4.2 Состояния Потока Каждый поток (istream или ostream) имеет ассоциированное с ним состояние, и обработка ошибок и нестандартных условий осуществляется с помощью соответствующей установки и проверки этого состояния.Поток может находиться в одном из следующих состояний:enum
11.5.4. Чтение данных и» стандартного входного потока
11.5.4. Чтение данных и» стандартного входного потока Команда paste имеет удобную опцию — (дефис), которая позволяет принимать данные из стандартного входного потока. Каждый дефис в командной строке соответствует одной колонке выходных данных. Например, список файлов