Принятый ответ, безусловно, правильный, а также объясняет, почему ваш код неверен.
Тем не менее, вы также должны рассмотреть возможность использования STL, чтобы делать то, что вам нужно, например:
int Number_of_maxNum(const std::vector<int>& ar)
{
if (ar.size() == 0)
return 0;
auto max = *std::max_element(ar.cbegin(), ar.cend());
return std::count(ar.cbegin(), ar.cend(), max);
}
Вот некоторые из преимуществ:
- Проще прочитайте (и напишите, как только вы к этому привыкнете).
- Нет проблем с ошибками "один на один" (как у вас было в вашем решении).
- Не беспокойтесь об инициализации максимальное число, чтобы быть наименьшим возможным числом.
Одним из недостатков этого решения является то, что оно зацикливается на векторе дважды. Этого все еще можно избежать, используя соответствующий алгоритм, например,
int Number_of_maxNum(const std::vector<int>& ar)
{
return std::accumulate(ar.cbegin(), ar.cend(), 0,
[max = std::numeric_limits<int>::min()]
(int count, int num) mutable {
return num > max ? max = num, 1 : count + (num == max);
});
}
Это фактически обычный метод для -l oop, поэтому я не уверен, что, написав его таким образом, можно многого добиться. Кроме того, изменчивые лямбды можно считать запахом кода. Вы должны использовать свое суждение, чтобы решить, какую технику использовать, когда узнаете о возможных вариантах.