c++ - How can I use vector or algorithm for finding maximum amount in this code? -
i wrote following code finding maximum score:
#include "stdafx.h" #include <iostream> #include<vector> #include <string> #include <algorithm> constexpr int max_students = 3; using namespace std; class student{ public: void vrod(); void dis(); int stno; int score int i; string name; }; void student::vrod(){ cout << "name="; cin >> name; cout << "stno="; cin >> stno; cout << "score="; cin >> score; } void student::dis(){ cout << "name=" << name << "\n" << "stno=" << stno << "\n" << "score=" << score<< "\n"; cin.get(); } int main(){ int l; vector<student> my_vector; for(int = 0; < n; i++) { student new_student; cout << "number: "; cin >> new_student.stno; cout << "score: "; cin >> new_student.score; cout << "name: "; cin >> new_student.name; my_vector.push_back(new_student); } l=0; for(int = 0; < max_students; ++i) { if (my_vector[i].score>l) { l=my_vector[i].score; } } cout << "max=" << l; cin.get(); cin.get(); }
i used common ways find maximum amount, how can use vector? how algorithm? found there function max in algorithm, needs 2 argument , not use code. tips beforehand.
you can use std::max_element
, lambda expression comparator:
auto l = std::max_element(my_vector.cbegin(), my_vector.cend(), [](const student& s1, const student& s2) { return s1.score < s2.score; });
l
const iterator, output maximum score need check if did return , output score
if(l != my_vector.cend()){ cout << "max=" << l->score; }
also few tips:
don't do
#define n 3
this c++, , giving meaningful variable names practice can use
constexpr int max_students = 3;
- you aren't using
student::vrod()
,student:dis()
methods anywhere
update (op request):
lambda expressions more convenient way write functions various uses. lambda in case
[](const student& s1, const student& s2) { return s1.score < s2.score; }
is more convenient way write comparator function, can implemented functor
struct compare_students { bool operator() (const student& s1, const student& s2) const { return s1.score < s2.score; } }; auto l = std::max_element(my_vector.cbegin(), my_vector.cend(), compare_students());
for more information please consider searching c++ lambda tutorials , examples.
Comments
Post a Comment