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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Гурген
13 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 42
#1

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

17.11.2014, 21:25. Просмотров 226. Ответов 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;
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2014, 21:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Опять непонятки с for_each (C++):

For_each - C++
С помощью for_each, найти колличество иксов в массиве |{xi|xi&lt;3}| (Visual C++ 2005)

Метод в for_each - C++
Привет всем. Есть класс и структурка: struct Foo { Foo(): name(&quot;nx&quot;), val(9) {} string name; int...

for_each и деструкторы - C++
#include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; class display { public: display() : i(0) { cout &lt;&lt; &quot;display...

Заменить все for на for_each - C++
Добрый вечер! Столкнулся с такой проблеммой. Нужно заменить все циклы for на for_each для реализации данных алгоритмов: Перестановка...

c++ for_each и вызов функции - C++
for(microbe &amp;i : microbes) { i.set_speed(diapozon_speed * rand() /RAND_MAX + min_speed ); // установка скорости ...

STL библиотека. Ф-ция for_each - C++
При изучении STL, столкнулся со странным поведением ф-ции for_each библиотеки algorithm void Library::Func(int n) { cout &lt;&lt; &quot;n...

1
Max Dark
шКодер самоучка
1849 / 1649 / 603
Регистрация: 09.10.2013
Сообщений: 3,676
Записей в блоге: 6
Завершенные тесты: 2
17.11.2014, 22:10 #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: здесь или здесь
Читать лучше английский вариант. ИМХО.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 22:10
Привет! Вот еще темы с ответами:

For_each не меняет входной контейнер - C++
здравствуйте есть код который нужно сделать с помощью std::for_each без c++11 и boost: std::list&lt;UnicodeString&gt; map; ...

Как использовать инструкцию for_each ? - C++
Не могу понять как использовать std::for_each (например для вектора) std::vector&lt;int&gt; v; // создан вектор for (int i = 1; i&lt;10; i++) ...

For_each, итераторы, каррирование, шаблоны - C++
Прошу объяснить доступным языком либо дать ссылку на соответствующий материал. 1. Как реализовать алгоритм for_each? 2. Как написать...

Почему for_each() не выводит кирилицу - C++
Вот такой код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; void show(const std::string &amp; s); ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru