Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2015, 10:29   #1
lampa9
Новичок
Джуниор
 
Регистрация: 27.11.2015
Сообщений: 1
По умолчанию istream_iterator в for_each (c++)

Здравствуйте. Читая книгу Страуструпа, столкнулся с небольшим примером. Там итераторы потока ввода перебираются в алгоритме for_each и значения, на которые они ссылаются - передаются в функцию. Программа должна заполнять map словами и "частотой встречаемости" этих слов. Вот код.

Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
#include <conio.h>
#include <string>
#include <iterator>
using namespace std;

map<string, int> histogram;
void record(const string& s)
{
	histogram[s]++;
}


void print(const pair<const string, int> p)
{
	cout << p.first << p.second << endl;
}

int main()
{
pair<const string, int> p1("f", 0);
histogram.insert(p1);
istream_iterator<string> ii(cin);
istream_iterator<string> endii = ++ii;
//record(*ii);
for_each(ii, endii, record);
for_each(histogram.begin(), histogram.end(), print);

_getch();
return 0;
}

Ошибок компилятор не выдаёт, однако и функцию record не вызывает. Вызов record(*ii); - работает правильно.

Объясните, пожалуйста, где ошибка, почему конструкция
Код:
for_each(ii, endii, record);
не работает ?
lampa9 вне форума Ответить с цитированием
Старый 28.11.2015, 17:37   #2
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

У вас итератор ii равен итератору endii, возможно, поэтому функция не срабатывает
_Alerter_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц