Есть отсортированный по алфавиту список с фамилиями, содержащийся в
class Stud {
string name;
string group;
list<int> balls;
};
Нужно вывести сведения о студентах, фамилии которых начинаются на заданную букву вот функциональные классы:
class Letter {
char c;
public:
Letter(char c) {
this->c = c;
}
bool operator ()(Stud &m) {
return m.name[0] == c;
}
};
class NotLetter{
char c;
public:
NotLetter(char c) {
this->c = c;
}
bool operator ()(Stud& m) {
return m.name[0] != c;
}
};
А вот алгоритм поиска фамилий на Д . data- объект класса Student
w = find_if(data.begin(), data.end(), Letter('Д'));
if (w == data.end())
cout << endl<<"Нет фамилий на заданную букву" << endl;
else {
cout << endl;
r = find_if(data.begin(), data.end(), NotLetter('Д'));
for (t = w; t !=r; t++) {
cout << *t ;
}
}
При разыменовании итератора выдает ошибку.Пожалуйста, помогите найти
#include <iostream>
#include <iomanip>
#include <list>
#include <algorithm>
#include<string>
#include <iterator>
using namespace std;class Stud {
public:
string name;
string group;
list <int> balls;
Stud() {
name = "\0"; group = "\0"; list <int> balls; ;
}
Stud(const string & an, const string & ag, const list<int> ab) {
name = an;
group = ag;
balls = ab;
}
friend ostream& operator<< (ostream &os, Stud& st) {
os << st.name << setw(10) << st.group << setw(4);
list<int>::iterator p = st.balls.begin();
while (p != st.balls.end()) {
cout << *p << " ";
p++;
}
os << endl;
return os;
}
};
bool bySurname(Stud &c1, Stud &c2) {
return (c1.name< c2.name);
}
class Letter {
char c;
public:
Letter(char c) {
this->c = c;
}
bool operator ()(Stud &m) {
return m.name[0] == c;
}
};
class NotLetter {
char c;
public:
NotLetter(char c) {
this->c = c;
}
bool operator ()(Stud& m) {
return m.name[0] != c;
}
};
void print(list<Stud> &data) {
list<Stud> ::iterator ptr = data.begin();
while (ptr != data.end()) {
cout << *ptr;
ptr++;
}
}
int main()
{
setlocale(LC_ALL, ".1251");
list <Stud> data;
Stud m("Иванов", "2а", { 1,3,4,5 });
Stud b("Дугинов", "3г", { 2,6,9,3,9 });
Stud p("Белов", "5г", { 9,6,6,3 });
data.push_back(m);
data.push_back(b);
data.push_back(p);
data.sort(bySurname);
print(data);
cout << endl << "Фамилии на Д:";
list<Stud> ::iterator w, r, t;
w = find_if(data.begin(), data.end(), Letter('Д'));
if (w == data.end())
cout << endl << "Нет фамилий на заданную букву" << endl;
else {
cout << endl;
r = find_if(data.begin(), data.end(), NotLetter('Д'));
for (t = w; t != r; t++) {
cout << *t;
}
}
system("pause");
return 0;
}
Главная беда - тут:
r = find_if(data.begin(), data.end(), NotLetter('Д'));
for (t = w; t != r; t++) {
cout << *t;
}
Смотрите - вы нашли на Д, а потом ищете НЕ Д, но этот элемент оказывается, увы, ДО найденного элемента. Так что до t == r
вы никак добраться не можете, и гоните подряд всякий мусор на экран...
Если уж вы хотите именно так - то сделайте хотя бы поиск от найденного элемента:
r = find_if(w, data.end(), NotLetter('Д'));
for (t = w; t != r; t++) {
cout << *t;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется простой проект DxЯ подключаю заголовочный и библиотеку
Возможно ли как-то добавить классу QCameraViewfinder через сигнал или слот on_click как у обычной кнопки?