39 lines
1.4 KiB
C++
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);
|
|
}
|
|
}
|