Итак, у вас есть структура с параметрами, такими как:
struct Student
{
std::string name;
std::array<int, 5> grades;
};
Поскольку это тег C++
, я решил использовать std::array<int, 5>
вместо int[5]
.
По моему мнению, Student
не обязательно должно быть внутри Group
, но я думаю, что это основано на мнении.
Теперь у вас есть Group
, который содержит студентов:
struct Group
{
Group(std::vector<Student> students) :
_students{ std::move(students) }
{}
double med(/* ... */) const
{ /* ... */ }
std::vector<Student> _students; // C++ -> use std::vector
};
Скажем, вы хотите передать оценки конкретного учащегося в качестве параметра функции med
, а не просто:
double Group::med(const std::array<int, 5>& grades) const
{ /* sum up grades, divide by 5, and return the result */ }
И вы бы назвали эту функцию следующим образом:
Student paul{"Paul", {1,2,3,4,5}};
Group group({paul});
group.med(paul.grades);
Как указано в комментариях, вы можете указать имя ученика вместо его / ее оценок:
double med(const std::string& name)
{
// find student
auto it = std::find_if(_students.begin(), _students.end(), [&name](const Student& student)
{
return student.name == name;
});
// if no student by that name
if (it == _students.end())
return -1.0;
// else
int sum{ 0 };
for (const auto& grade : it->grades)
{
sum += grade;
}
return static_cast<double>(sum)/(it->grades.size());
}
Здесь - это обсуждение хороших книг по C ++.