Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99

STL. Не работает вывод через << в поток когда использую итераторы :(

07.12.2011, 20:25. Показов 793. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вроде бы ничего сложного, но почему-то работать не хочет. Никак не могу понять почему (
Ругается, когда пишу
C++
1
2
3
4
void main() {
    ToursManager tm;
    cout << tm;
}
А вот сам код заголовника с классом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <fstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <iterator>
#include <algorithm>
 
struct TourEntry {
public:
    std::string TourName;               // название тура
    std::string ClientSurname;          // фамилия клиента
    unsigned short DaysCount;           // количество дней
    double DayPriceRub;                 // цена за день в рублях
    double Fare;                        // цена за проезд
    double TravelCost;                  // общая стоимость поездки в рублях
    double CurrencyCourse;              // курс валюты
    double CurrencyCount;               // количество валюты
 
    TourEntry() :
        TourName(),
        ClientSurname(),
        DaysCount(0),
        DayPriceRub(0),
        Fare(0),
        TravelCost(0),
        CurrencyCourse(0),
        CurrencyCount(0)
    {}
 
    inline bool LessFare(const TourEntry& teL, const TourEntry& teR) {
        return teL.Fare < teR.Fare;
    }
 
    inline bool LessDaysCount(const TourEntry& teL, const TourEntry& teR) {
        return teL.DaysCount < teR.DaysCount;
    }
 
    friend std::istream &operator>>(std::istream &stream, TourEntry &te) {
        stream >> te.TourName;
        stream >> te.ClientSurname;
        stream >> te.DaysCount;
        stream >> te.DayPriceRub;
        stream >> te.Fare;
        stream >> te.TravelCost;
        stream >> te.CurrencyCourse;
        stream >> te.CurrencyCount;
        return stream;
    }
 
    friend std::ostream &operator<<(std::ostream &stream, const TourEntry &te) {
        stream << "Name \"" << te.TourName << "\"" << std::endl;
        stream << "Client " << te.ClientSurname << std::endl;
        stream << "Number of days: " << te.DaysCount << std::endl;
        stream << "Cost: ----------------------------------" << std::endl;
        stream << "Daily payment:   " << te.DayPriceRub << " RUB" << std::endl;
        stream << "Fare:            " << te.Fare << "RUB" << std::endl;
        stream << "Total price:     " << te.TravelCost << std::endl;
        stream << "Currency course: " << te.CurrencyCourse << std::endl;
        stream << "Currency count:  " << te.CurrencyCount << std::endl;
        return stream;
    }
};
 
 
 
 
class ToursManager {
private:
    std::vector<TourEntry> _tours;
    std::queue<TourEntry> _history;
 
public:
    ToursManager(){}
    ~ToursManager(){}
 
public:
    bool AddDataFromFile(std::string fileName) {
        std::fstream file(fileName, std::ios::in);
        if (!file.is_open()) return false;
 
        std::istream_iterator<TourEntry> reader(file);
        std::istream_iterator<TourEntry> readerEOF;
        copy (reader, readerEOF, _tours);
 
        file.close();
        return true;
    }
 
    unsigned int GetSize() const {
        return (unsigned int)_tours.size();
    }
 
    TourEntry FindByTourName(std::string tourName) const {
        std::vector<TourEntry>::const_iterator finder;
        finder = std::find_if(_tours.begin(), _tours.end(),
                             [tourName](const TourEntry& te){ 
                             return te.TourName == tourName;}
        );
        if (finder != _tours.end()) {
            copy(finder,finder,_history.back());
            return *finder;
        } else {
            return TourEntry();
        }
    }
 
    friend std::ostream &operator<<(std::ostream &stream, const ToursManager &tm) {
        std::for_each(tm._tours.begin(), tm._tours.end(), [&stream](TourEntry te) {
            stream << te;
            stream << std::endl;
        });
        return stream;
    }
};
MS VS 2010 выдает 32 ошибки (
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2011, 20:25
Ответы с готовыми решениями:

STL. Итераторы и последовательные контейнеры
Немогу решить эти задачки: 1 Написать экземпляр класса queue на основе элементов типа string. 2.Написаты программу, которая использует...

Итераторы потокового ввода/вывода stl
Возник такой вопрос при изучении stl. Берем файл, из которого нужно считать данные, через copy записываем в вектор, но может мне кто-нибудь...

Почему итераторы в STL используют такой странный подход к индексации?
Здравствуйте. Вопросы касаются пока только последовательных контейнеров. Почему при инициализации контейнера массивом из, например, 5...

2
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
07.12.2011, 21:02
Про новые лямбды ничего не скажу. Мне пока что бустовые бинды ближе. Тупо закоментарил их.
Ошибок стало меньше.

C++
1
2
3
// line 79
std::fstream file(fileName, std::ios::in); // error
std::fstream file(fileName.c_str(), std::ios::in); // ok
C++
1
2
3
//line 83
copy (reader, readerEOF, _tours); // error
copy (reader, readerEOF, std::back_inserter(_tours)); // ok
line 101:
C++
1
copy(finder,finder,_history.back());
что тут? добавление в конец очереди? если да, то обычный _hostory.push(*finder). + это константная ф-ия. поэтому либо убрать константность ф-ии, либо сделать _history mutable.
1
 Аватар для DWand
13 / 13 / 5
Регистрация: 23.04.2011
Сообщений: 99
07.12.2011, 21:14  [ТС]
Да, да, да!
В copy ошибка была и правда,
string работает нормально и без c_str()

Исправил класс, теперь все запускает без ошибок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class ToursManager {
private:
    std::vector<TourEntry> _tours;
    std::queue<TourEntry> _history;
 
public:
    ToursManager(){}
    ~ToursManager(){}
 
public:
    bool AddDataFromFile(std::string fileName) {
        std::fstream file(fileName, std::ios::in);
        if (!file.is_open()) return false;
 
        std::istream_iterator<TourEntry> reader(file);
        std::istream_iterator<TourEntry> readerEOF;
        copy (reader, readerEOF, back_inserter(_tours));
 
        file.close();
        return true;
    }
 
    unsigned int GetSize() const {
        return (unsigned int)_tours.size();
    }
 
    TourEntry FindByTourName(std::string tourName) {
        std::vector<TourEntry>::const_iterator finder;
        finder = std::find_if(_tours.begin(), _tours.end(),
                             [tourName](const TourEntry& te){ 
                             return te.TourName == tourName;}
        );
        if (finder != _tours.end()) {
            _history.push(*finder);
            return *finder;
        } else {
            return TourEntry();
        }
    }
 
    friend std::ostream &operator<<(std::ostream &stream, const ToursManager &tm) {
        std::for_each(tm._tours.begin(), tm._tours.end(), [&stream](TourEntry te) {
            stream << te;
            stream << std::endl;
        });
        return stream;
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.12.2011, 21:14
Помогаю со студенческими работами здесь

Найти элемент в контейнере priority_queue, используя STL вские итераторы и алгоритмы
Здравствуйте, задача описана в навание темы. Можно перебрать в цикле все элементы очереди, сравнивая с нужным, но требуется именно с...

Где и когда применяются итераторы?
Форумчане объясните пожалуйста где и когда применяются итераторы? принцип работы понятен перебор данных одного типа но можно пример из жизни

Ошибка когда использую фун-ю split()
&lt;? print&lt;&lt;&lt;HERE &lt;textarea rows='10' cols='50' name=&quot;text&quot;&gt;&lt;/textarea&gt; &lt;br&gt; &lt;input type='submit' name='go'&gt; HERE; ...

Зависает форма, когда использую while или for
Что делать если при использование for или while зависает форма ? вот код: private void button3_Click(object sender, EventArgs e) ...

STL и поток
Есть вектор, объявленный в основной программе, состоящий из ссылок на компоненты типа TImage и TCheckBox: struct mass { TImage *img; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru