trainings/AdvancedCppV2/Presentation/exercises/students/students.cpp
2024-04-26 11:36:08 +02:00

39 lines
1.4 KiB
C++

#include <algorithm>
#include <iostream>
#include <iterator>
#include <memory>
#include <ranges>
#include <sstream>
#include <vector>
namespace rn = std::ranges;
struct Student {
int index_;
std::string name_;
double average_;
};
std::vector<Student*> filterStudents(const std::vector<std::unique_ptr<Student>>& students, double minAverage) {
std::vector<Student*> ptr;
rn::transform(students, std::back_inserter(ptr), [](const std::unique_ptr<Student> &s){return s.get();});
std::erase_if(ptr, [minAverage](Student* s){return s->average_ < minAverage;});
return ptr;
}
int main() {
std::vector<std::unique_ptr<Student>> students;
students.push_back(std::make_unique<Student>(123456, "Jordan", 4.53));
students.push_back(std::make_unique<Student>(654321, "Michael", 4.51));
students.push_back(std::make_unique<Student>(246892, "John", 4.56));
students.push_back(std::make_unique<Student>(743561, "Jane", 4.44));
students.push_back(std::make_unique<Student>(811111, "Anna", 4.46));
students.push_back(std::make_unique<Student>(811111, "Tom", 4.36));
students.push_back(std::make_unique<Student>(811111, "Jerry", 4.56));
students.push_back(std::make_unique<Student>(811111, "Mike", 4.45));
const auto res = filterStudents(students, 4.45);
for(const auto& [ind, nam, av] : res | std::views::transform([](Student *ptr){return *ptr;})){
printf("%d %s %f\n", ind, nam.c_str(), av);
}
}