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

Опять непонятки с for_each - C++

Восстановить пароль Регистрация
 
Гурген
13 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 40
17.11.2014, 21:25     Опять непонятки с for_each #1
Недавно создавал тему на проблему реализации for_each.Теперь для моей программы нужно добавить еще одну функцию:• Вывод на экран студентов, указанной группы.Как это реализовать с помощью for_each не понимаю.Помогите пожалуйста , и подкиньте книжки какие-нибудь стоящие по STL.
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<string>
#include <iterator>
#include <algorithm> 
#include "windows.h"
#include<functional>
using namespace std;
using namespace std::placeholders;
class student
{
public:
    string group;
    string name;
    string surname;
    string patronymic;
    student(){};
    student(string surname1, string name1, string patronymic1, string group1)
    {
        name = name1;
        surname = surname1;
        patronymic = patronymic1;
        group = group1;
    }
    string getgroup1()
    {
        return group;
    }
    string getname1()
    {
        return name;
    }
    string getsurname1()
    {
        return surname;
    }
    friend ostream&operator<<(ostream& stream, student ob);
};
 
bool operator<(const student&o1, const student&o2)
{
    if (o1.name<o2.name) return true;
    return false;
}
ostream&operator<<(ostream& stream, student ob)
{
    stream << ob.surname << " " << ob.name << " " << ob.patronymic << ", " << ob.group << endl;
    return stream;
}
class funct
{ 
    string group1;
public:
    funct() {}
    funct(string s)
    {
        group1=s;
    }
    bool operator()(student a)
    {
        if(group1==a.getgroup1()) return true;
        return false;
    }
};
class cl
{
    
public:
    vector <student> v;
    void up1();
    void up(student&);
    void dobav_back(student);
    void oem(string&);
    void print(student s,string group1)
    {
        funct poisk(group1);
        find_if(v.begin(),v.end(),poisk);
    }
    int Count_1(string);
    friend ostream& operator<<(ostream & stream, cl &ob)
    {
        copy(ob.v.begin(), ob.v.end(), ostream_iterator<student>(stream));
        return stream;
    }
};
int cl::Count_1(string group1)
    {
        funct poisk(group1);
        return count_if(v.begin(),v.end(),poisk);
    }
void cl::oem(string &k)
{
    char st[256];
    cin >> st;
    OemToChar(st, st);
    k = string(st);
}
void cl::up1()
{
 
    for_each(v.begin(), v.end(), bind(&cl::up, this, _1));
}
void cl::dobav_back(student s)
{
    v.push_back(s);
}
void cl::up(student &s)
{
    transform(s.surname.begin(), s.surname.end(), s.surname.begin(), toupper);
    
}
 
int main()
 
{   setlocale(LC_ALL,"russian");
    cl ob;
    string name;
    string surname;
    string surname1;
    string patronymic;
    string group;
    int a;
    student s(surname, name, patronymic, group);
    cout << "1.Добавить нового студента в конец списка*" << endl << "2.Вывести список студентов на экран" <<endl<<"3.Изменить регистр для фамилии студента"<< endl<<"4.Подсчет студентов в группе"<<endl<<"5.Вывод на экран студентов указанной группы"<<endl;
    while (true)
    {
        cout << "Введите пункт-";
        wcin >> a;
        switch (a)
        {
        case 1:
            {
                cout << "Фамилия:";
                ob.oem(surname);
                cout << "Имя:";
                ob.oem(name);
                cout << "Отчество:";
                ob.oem(patronymic);
                cout << "Группа:";
                cin >> group;
                student s(surname, name, patronymic, group);
                ob.dobav_back(s);
                break;
            }
        case 2:
            {
                cout << ob;
                break;
            }
        case 3:
            {
                student s(surname, name, patronymic, group);
                ob.up1();
                break;
            }
        case 4:
            {
                student s(surname, name, patronymic, group);
                cout<<"Группа:";
                cin>>group;
                cout<<endl<<"Количество студентов в группе:";
                cout<<ob.Count_1(group);
                break;
            }
            
        case 5:
            {
                student s(surname, name, patronymic, group);
                cout<<"Группа:";
                cin>>group;
                cout<<endl<<"Студенты в этой группе:";
                break;
            }
        }
    }
    return 0;
 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2014, 21:25     Опять непонятки с for_each
Посмотрите здесь:

For_each C++
for_each и деструкторы C++
C++ метод в for_each
C++ Написание функции для for_each
Почему for_each() не выводит кирилицу C++
Заменить все for на for_each C++
Как использовать инструкцию for_each ? C++
C++ c++ for_each и вызов функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
17.11.2014, 22:10     Опять непонятки с for_each #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
с использованием объекта функтора
C++
1
2
3
4
5
6
7
8
9
10
class printer{
    string group;
public:
    printer(string grp):group(grp){}
    void operator() (const student& s) {
        if (group == s.group) cout << s.name;
    }
};
///.....
for_each(v.begin(), v.end(), printer(group)); // создаем объект класса "принтер" и передаем его в функцию for_each
с использованием лямбда-функции
C++
1
2
3
for_each(v.begin(), v.end(), [group](const student& s) -> void {
        if (group == s.group) cout << s.name;
    });
Добавлено через 1 минуту
используя ranged for
C++
1
2
3
for(const student& s: v) {
    if (group == s.group) cout << s.name;
}
Добавлено через 3 минуты
Документация по STL: здесь или здесь
Читать лучше английский вариант. ИМХО.
Yandex
Объявления
17.11.2014, 22:10     Опять непонятки с for_each
Ответ Создать тему
Опции темы

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