, <=, >= и > к итераторам, ссыла­ющимся на элементы списка L; также он не будет читать что-либо из L, ис­полняя операции вроде х = *i. Однако он воспользуется противоположной операцией *i = х, чтобы записывать копируемые значения в L.

Потоковые итераторы: использование функции сору для ввода и вывода

Мы можем применить алгоритм сору для вывода, как показано в следую­щем фрагменте:

const   int N =  4;

int  a[N]   =   {7,   б,   9,   2};

copy(a,   a+N,   ostream_iterator<int>(cout,   "   "));

Мы также можем определить переменную-итератор i для использования в качестве третьего аргумента функции сору. Это достигается заменой вы­зова сору следующими двумя операторами:

ostream_iterator<int> i(cout,   "   "); copy(a,   a+N,   i);

В любом случае в поток стандартного вывода cout будут выведены числа 7, 6, 9 и 2, как если бы мы написали

for   (int*  p=a;   p!=  a+N;   p++) cout  «  *р «   "   ";

Для ввода мы можем использовать аналогичный прием, написав

istream_iterator<int,   ptrdiff_t>(file)

me file является потоком ввода. Это длинное выражение можно, например, употребить вместо v.begin(), которое мы использовали бы для копирования элементов из контейнера v. Если опустить file в приведенной строчке, то по­лучим выражение

istream_iterator<int,   ptrdiff_t>()

которое нужно применить вместо v.end(),TaK как это выражение служит для обозначения конца файла. Например, пусть у нас есть файл example.txt со следующим содержанием:

10   20  30 40  50

Известно, что файл содержит только целые числа (разделенные пробелами), но мы не знаем заранее, сколько целых чисел находится в файле. Следую­щая программа читает целые числа из этого файла и показывает их на экра­не; условная компиляция используется для совместимости с ВС5, который требует наличия второго аргумента для шаблона istream_iterator.

11 copyio.cpp: Используем алгоритм сору //  для ввода-вывода.

#include <fstream> #include <iostream> #include <iterator> #include <vector> using namespace std;

#if defined! BORLANDC ) && _ BORLANDC == 0x530

// Для ВС5.3: typedef istream_iterator<int,

char,

char_traits<char>, ptrdiff_t> istream_iter; #elif defined! BORLANDC )  // Для ВС5.2:


<< назад вперед >>