Форум программистов, компьютерный форум CyberForum.ru

Итераторы: зачем используется оператор инкремента для потоков вывода? - C++

Восстановить пароль Регистрация
 
jobster
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 45
10.07.2014, 11:53     Итераторы: зачем используется оператор инкремента для потоков вывода? #1
Хотел уточнить зачем используется оператор инкремента для потоков вывода:

C++
1
2
3
4
5
6
7
 void main(void)
{
    std::ostream_iterator<int> output(cout, " ");
    
    *output++ = 123;
    *output++ = 4;
}
Если не использовать оператор инкремента, то вывод получается точно такой же.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2014, 11:53     Итераторы: зачем используется оператор инкремента для потоков вывода?
Посмотрите здесь:

Перевод стандартных потоков ввода/вывода в файлы C++
C++ Оператор вывода для иерархии
Перехват потоков ввода/вывода C++
C++ Связывание потоков ввода-вывода
C++ зачем нужны итераторы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
10.07.2014, 12:08     Итераторы: зачем используется оператор инкремента для потоков вывода? #2
Потому что этот итератор может использоваться в обобщённых алгоритмах. Они ничего не знают об итераторе, который им передаётся, и используют инкремент итератора после каждой итерации.
jobster
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 45
10.07.2014, 12:19  [ТС]     Итераторы: зачем используется оператор инкремента для потоков вывода? #3
Вы можете привести пример к вашему комментарию, в котором есть различия при использовании и не использовании оператора инкремента для потоков вывода.

Добавлено через 57 секунд
Или в данном случае оператор инкремента используется как заглушка?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
10.07.2014, 12:29     Итераторы: зачем используется оператор инкремента для потоков вывода? #4
Вот примерный код обобщённого алгоритма copy:
C++
1
2
3
4
5
6
template <class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator First, InputIterator Last, OutputIterator Out)
{
    for ( ; First != Last; )
        *Out++ = *First++
}
Как видите, для вывода используется конструкци *Out++.
В этот алгоритм может быть передан как итератор вывода в поток, так любой другой итератор, соответствующий требованиям к итератору вывода:
C++
1
2
3
4
int a[4] = { 1, 2, 3, 4 };
int b[4];
copy(a, a + 4, b);
copy(a, a + 4, ostream_iterator<int>(cout, " "));
Yandex
Объявления
10.07.2014, 12:29     Итераторы: зачем используется оператор инкремента для потоков вывода?
Ответ Создать тему
Опции темы

Текущее время: 04:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru