Столкнулся с задачей, которую не смог осилить собственноручно, обратился к гулугулу. Нашёлся единственный ответ, где мне непонятна перегрузка оператора класса. Последовательность написанного понимаю, но не понимаю суть работы самого алгоритма. Прикладываю код для общего понимания. Работа
for_each
в целом ясна.
То есть, объект-функция принимает число, записывает значение, получает адрес, сдвигается и так всё повторяется в цикле? Буду очень благодарен за разъяснение молодёжи.
/*
Напишите программу, которая читает последовательность целых чисел из стандартного
ввода с помощью потокового итератора чтения istream_iterator. Нечетные числа
поместите в один файл посредством ostream_iterator, разделяя значения пробелом.
Четные числа таким же образом запишите в другой файл, при этом каждое значение
должно размещаться в отдельной строке.
*/
class OddOrEvenValue
{
ofstream OddFile, EvenFile;
ostream_iterator<int> OddOut;
ostream_iterator<int> EvenOut;
public:
OddOrEvenValue(
const char* odd_file_name,
const char* odd_delimiter,
const char* even_file_name,
const char* even_delimiter)
: OddFile(odd_file_name, ios_base::out)
, EvenFile(even_file_name, ios_base::out)
, OddOut(OddFile, odd_delimiter)
, EvenOut(EvenFile, even_delimiter)
{
}
void operator( ) ( const int& val )
{
(*(val%2 ? OddOut : EvenOut) = val)++;
}
};
istream_iterator<int> in(cin), eos;
OddOrEvenValue divisor("odd.txt", " ", "even.txt", "\n");
for_each< istream_iterator<int>, OddOrEvenValue& >(in, eos, divisor);